原子计数器

更新时间:
复制 MD 格式

使用 Python SDK 对整型属性列执行行级原子的递增或递减操作。

前提条件

安装Tablestore Python SDK并初始化客户端。原子计数器需要 5.1.0 及以上版本,建议使用最新版本。

功能说明

调用 update_row 方法,将属性列更新类型设置为 INCREMENT,对整型属性列执行原子计数。正数表示递增,负数表示递减。

def update_row(
    self,
    table_name,
    row,
    condition,
    return_type=None,
    transaction_id=None,
)

以下示例将 counter 属性列的值原子增加 5

primary_key = [("partition", "device"), ("id", 1)]
attribute_columns = {"INCREMENT": [("counter", 5)]}
row = Row(primary_key, attribute_columns)
condition = Condition(RowExistenceExpectation.EXPECT_EXIST)

consumed, return_row = client.update_row(
    "example_table",
    row,
    condition,
)
print("Write CU: %s" % consumed.write)

Python SDK 的 update_row 方法不直接返回原子计数后的列值。如需获取新值,更新完成后调用 get_row 读取该列。

参数说明

原子计数操作包含以下关键参数。

名称

类型

说明

table_name(必选)

str

数据表名称。

primary_key(必选)

List[Tuple]

目标行的主键。必须包含全部主键列,且主键结构与数据表一致。

column_name(必选)

str

执行原子计数的属性列名称。只支持整型属性列。

value(必选)

int

属性列值的变更量。正数递增,负数递减。

condition(必选)

Condition

更新条件。有关配置方法,请参见条件更新

transaction_id(可选)

str

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

使用限制

  • 只支持整型属性列。目标列不存在时,以 0 为初始值执行变更;目标列存在但不是整型时,返回 OTSParameterInvalid 错误。

  • 变更量可为正数或负数,但计算结果不能超出 64 位有符号整数范围,否则返回 OTSParameterInvalid 错误。

  • 原子计数只作用于最新版本,不支持指定数据版本号。更新后会写入一个新的数据版本。

  • 同一次更新中,不能对同一属性列同时执行原子计数和覆盖写入、删除等其他操作。

    重要

    原子计数操作可能因网络超时或系统错误返回失败。直接重试可能导致计数器被重复更新,使结果偏多或偏少。对精确性有严格要求时,先读取当前值,再通过条件更新写入新值。