日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

原子計數器

如果要在某些在線應用中快速進行計數操作,您可以使用原子計數器實現。使用原子計數器時,您需要將表中的某一列當成一個原子計數器,然后對該列進行原子計數操作。

前提條件

  • 已初始化Client。具體操作,請參見初始化OTSClient。

  • 已創建數據表并寫入數據。

注意事項

  • 只支持對整型列的列值進行原子計數操作。

  • 作為原子計數器的列,如果寫入數據前該列不存在,則默認值為0;如果寫入數據前該列已存在且列值非整型,則產生OTSParameterInvalid錯誤。

  • 增量值可以是正數或負數,但不能出現計算溢出。如果出現計算溢出,則產生OTSParameterInvalid錯誤。

  • 默認不返回進行原子計數操作的列值,您可以通過相應操作指定返回進行原子計數操作的列值。

  • 在單次更新請求中,不能對某一列同時進行更新和原子計數操作。假設列A已經執行原子計數操作,則列A不能再執行其他操作(例如列的覆蓋寫,列刪除等)。

  • 在一次BatchWriteRow請求中,支持對同一行數據進行多次更新操作。但是如果某一行已進行原子計數操作,則該行在此批量請求中只能出現一次。

  • 原子計數操作只能作用在列值的最新版本,不支持對列值的特定版本做原子計數操作。更新完成后,原子計數操作會插入一個新的數據版本。

接口

updateRowChange類中新增了原子計數器的操作接口,操作接口說明請參見下表。

接口

說明

IncrementColumn(columnName string, value int64)

對列執行增量變更,例如+X,-X等。

AppendIncrementColumnToReturn(name string)

對于進行原子計數操作的列,設置需要返回列值的列名。

SetReturnIncrementValue()

設置返回類型,返回進行原子計數操作的列的新值。

參數

參數

是否必選

說明

TableName

數據表名稱。

ColumnName

進行原子計數操作的列名。只支持對整型列的列值進行原子計數器操作。

Value

對列進行增量變更的值。

示例

以下示例用于在寫入數據時使用updateRowChange接口對整型列做列值的增量變更,然后讀取更新后的新值。

func UpdateRowWithIncrement(client *tablestore.TableStoreClient, tableName string) {
    fmt.Println("begin to update row")
    updateRowRequest := new(tablestore.UpdateRowRequest)
    updateRowChange := new(tablestore.UpdateRowChange)
    //設置數據表名稱。
    updateRowChange.TableName = tableName
    updatePk := new(tablestore.PrimaryKey)
    updatePk.AddPrimaryKeyColumn("pk1", "pk1increment")
    updatePk.AddPrimaryKeyColumn("pk2", int64(2))
    updatePk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
    updateRowChange.PrimaryKey = updatePk
    //將進行原子計數操作的col2列的列值+30,不能設置時間戳。
    updateRowChange.IncrementColumn("col2", int64(30))
    //將進行原子計數操作的列值返回。
    updateRowChange.SetReturnIncrementValue()
    updateRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
    updateRowChange.AppendIncrementColumnToReturn("col2")
    updateRowRequest.UpdateRowChange = updateRowChange

    resp, err := client.UpdateRow(updateRowRequest)
    if err != nil {
        fmt.Println("update failed with error:", err)
        return
    } else {
        fmt.Println("update row finished")
        fmt.Println(len(resp.Columns))
        fmt.Println(resp.Columns[0].ColumnName)
        fmt.Println(resp.Columns[0].Value)
        fmt.Println(resp.Columns[0].Timestamp)
    }
}