Go SDK 可對整型屬性列執行行級原子的遞增或遞減操作,並在同一請求中返回更新後的值。
前提條件
安裝Tablestore Go SDK並初始化用戶端。
功能說明
調用 IncrementColumn 對指定整型屬性列執行原子計數。正數表示遞增,負數表示遞減。服務端在行層級保證操作的原子性,並寫入一個新的資料版本。如需在同一請求中擷取更新後的值,調用 AppendIncrementColumnToReturn 指定返回列,並調用 SetReturnIncrementValue 設定傳回型別。
func (rowchange *UpdateRowChange) IncrementColumn(columnName string, value int64)
func (rowchange *UpdateRowChange) AppendIncrementColumnToReturn(name string)
func (rowchange *UpdateRowChange) SetReturnIncrementValue()
以下樣本將 example_table 中 row1 的 score 列增加 10,並返回更新後的值。
primaryKey := &tablestore.PrimaryKey{}
primaryKey.AddPrimaryKeyColumn("id", "row1")
change := &tablestore.UpdateRowChange{
TableName: "example_table",
PrimaryKey: primaryKey,
}
change.IncrementColumn("score", int64(10))
change.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
change.AppendIncrementColumnToReturn("score")
change.SetReturnIncrementValue()
response, err := client.UpdateRow(&tablestore.UpdateRowRequest{UpdateRowChange: change})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.Columns[0].Value)
參數說明
UpdateRowChange 中與原子計數器相關的參數如下。
|
名稱 |
類型 |
說明 |
|
TableName(必選) |
|
資料表名稱。 |
|
PrimaryKey(必選) |
|
目標行的完整主鍵。 |
|
Columns(必選) |
|
屬性列更新操作。調用 |
|
Condition(必選) |
|
更新條件。更多資訊,請參見條件更新。 |
|
ReturnType(可選) |
|
傳回型別。調用 |
|
ColumnNamesToReturn(可選) |
|
要返回更新後值的原子計數列名稱。調用 |
|
TransactionId(可選) |
|
局部事務 ID。僅在局部事務內執行原子計數時設定。 |
傳回值
UpdateRowResponse 中與原子計數器相關的業務欄位如下。
|
欄位 |
類型 |
說明 |
|
|
|
設定 |
使用限制
只支援整型屬性列。目標列不存在時以 0 為初始值;目標列已存在但不是整型時返回參數錯誤。
增量可以為正數或負數,但計算結果不能溢出。
原子計數只操作最新版本,不支援指定時間戳記,操作後寫入一個新版本。
同一請求中,不能對同一列同時執行原子計數和覆蓋寫、刪除等其他動作。
BatchWriteRow請求中,執行原子計數的行只能出現一次。
網路逾時或系統錯誤可能導致用戶端重試,使原子計數被執行多次。需要精確控制最終列值時,使用條件更新實現樂觀鎖。