原子计数器

更新时间:
复制 MD 格式

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_tablerow1score 列增加 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(必选)

string

数据表名称。

PrimaryKey(必选)

*PrimaryKey

目标行的完整主键。

Columns(必选)

[]ColumnToUpdate

属性列更新操作。调用 IncrementColumn 添加原子计数操作。列名为要更新的整型列,增量为正数时递增、为负数时递减。目标列不存在时以 0 为初始值。

Condition(必选)

*RowCondition

更新条件。更多信息,请参见条件更新

ReturnType(可选)

ReturnType

返回类型。调用 SetReturnIncrementValue 后设置为 ReturnType_RT_AFTER_MODIFY

ColumnNamesToReturn(可选)

[]string

要返回更新后值的原子计数列名称。调用 AppendIncrementColumnToReturn 添加。

TransactionId(可选)

*string

局部事务 ID。仅在局部事务内执行原子计数时设置。

返回值

UpdateRowResponse 中与原子计数器相关的业务字段如下。

字段

类型

说明

Columns

[]*AttributeColumn

设置 ReturnType_RT_AFTER_MODIFY 后,包含通过 AppendIncrementColumnToReturn 指定的属性列更新后值。

使用限制

  • 只支持整型属性列。目标列不存在时以 0 为初始值;目标列已存在但不是整型时返回参数错误。

  • 增量可以为正数或负数,但计算结果不能溢出。

  • 原子计数只操作最新版本,不支持指定时间戳,操作后写入一个新版本。

  • 同一请求中,不能对同一列同时执行原子计数和覆盖写、删除等其他操作。

  • BatchWriteRow 请求中,执行原子计数的行只能出现一次。

重要

网络超时或系统错误可能导致客户端重试,使原子计数被执行多次。需要精确控制最终列值时,使用条件更新实现乐观锁。