原子计数器

更新时间:2025-02-13 03:43:17

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

前提条件

注意事项

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

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

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

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

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

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

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

接口

rowUpdateChange类中新增了原子计数器的操作接口,操作接口说明请参见下表。

接口

说明

接口

说明

RowUpdateChange increment(Column column)

对列执行增量变更,例如+X,-X等。

void addReturnColumn(String columnName)

对于进行原子计数操作的列,设置需要返回列值的列名。

void setReturnType(ReturnType returnType)

设置返回类型,返回进行原子计数操作的列的新值。

参数

参数

说明

参数

说明

tableName

数据表名称。

columnName

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

value

对列进行增量变更的值。

returnType

设置返回类型为ReturnType.RT_AFTER_MODIFY,将进行原子计数操作的列值返回。

示例

写入数据时,使用rowUpdateChange接口对整型列做列值的增量变更,然后读取更新后的新值。

private static void incrementByUpdateRowApi(SyncClient client) {
    //构造主键。
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("<PRIMARY_KEY_NAME>", PrimaryKeyValue.fromString("pk0"));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    //设置数据表名称。
    RowUpdateChange rowUpdateChange = new RowUpdateChange("<TABLE_NAME>", primaryKey); 

    //将进行原子计数操作的price列的列值+10,不能设置时间戳。
    rowUpdateChange.increment(new Column("price", ColumnValue.fromLong(10)));

    //设置returnType为ReturnType.RT_AFTER_MODIFY,将进行原子计数操作的列值返回。
    rowUpdateChange.addReturnColumn("price");
    rowUpdateChange.setReturnType(ReturnType.RT_AFTER_MODIFY);

    //对price列进行原子计数操作。
    UpdateRowResponse response = client.updateRow(new UpdateRowRequest(rowUpdateChange));

    //打印更新后的新值。
    Row row = response.getRow();
    System.out.println(row);
}
  • 本页导读 (1)
  • 前提条件
  • 注意事项
  • 接口
  • 参数
  • 示例
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等