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请求中,执行原子计数的行只能出现一次。
网络超时或系统错误可能导致客户端重试,使原子计数被执行多次。需要精确控制最终列值时,使用条件更新实现乐观锁。