原子计数器

如果要在某些在线应用中快速进行计数操作,您可以使用原子计数器实现。使用原子计数器时,您需要将表中的某一列当成一个原子计数器,然后对该列进行原子计数操作。

说明

从表格存储Python SDK 5.1.0以上版本开始支持原子计数器功能。

前提条件

  • 已初始化Client。具体操作,请参见初始化OTSClient
  • 已创建数据表并写入数据。

注意事项

  • 只支持对整型列的列值进行原子计数操作。

  • 作为原子计数器的列,如果写入数据前该列不存在,则默认值为0;如果写入数据前该列已存在且列值非整型,则产生OTSParameterInvalid错误。

  • 增量值可以是正数或负数,但不能出现计算溢出。如果出现计算溢出,则产生OTSParameterInvalid错误。

  • 默认不返回进行原子计数操作的列值,您可以通过相应操作指定返回进行原子计数操作的列值。

  • 在单次更新请求中,不能对某一列同时进行更新和原子计数操作。假设列A已经执行原子计数操作,则列A不能再执行其他操作(例如列的覆盖写,列删除等)。

  • 在一次BatchWriteRow请求中,支持对同一行数据进行多次更新操作。但是如果某一行已进行原子计数操作,则该行在此批量请求中只能出现一次。

  • 原子计数操作只能作用在列值的最新版本,不支持对列值的特定版本做原子计数操作。更新完成后,原子计数操作会插入一个新的数据版本。

接口

updateRow接口新增了原子计数器的相关操作,操作说明请参见下表。

操作

说明

update_of_attribute_columns

更新类型为INCREMENT,对列执行增量变更,例如+X,-X等。

参数

参数

说明

table_name

数据表名称。

column_name

进行原子计数操作的列名。只支持对整型列的列值进行原子计数器操作。

value

对列进行增量变更的值。

示例

以下示例用于在写入数据时使用updateRow接口对整型列做列值的增量变更,属性列中对应的类型为INCREMENT。

def increment_by_update_row(client):
    # 设置数据表名称。
    table_name ='<TABLE_NAME>'
    primary_key = [('pk0', 1)]
    # INCREMENT类型为自增列,如下示例对price属性列值+6。
    update_of_attribute_columns = {
        'INCREMENT': [('price', 6)]
    }
    row = Row(primary_key, update_of_attribute_columns)
    consumed, return_row = client.update_row(table_name, row, None)
    print ('Update succeed, consume %s write cu.' % consumed.write)