全部產品
Search
文件中心

Tablestore:原子計數器

更新時間:Jun 26, 2026

Java SDK 對整型列執行行級原子的遞增或遞減操作,單次請求可在更新後返回新值,適用於線上應用快速計數(如文章 PV、訊息計數、特定列加一等)的情境。

前提條件

安裝 Tablestore Java SDK並初始化用戶端。

功能說明

// RowUpdateChange 提供以下方法完成原子計數操作
public RowUpdateChange increment(Column column)
public void addReturnColumn(String columnName)
public void setReturnType(ReturnType returnType)

通過以下三個方法在 RowUpdateChange 上完成原子計數操作:

  • increment(Column):對指定整型列執行原子的遞增或遞減操作(正數遞增,負數遞減)。

  • addReturnColumn(String):指定需要在響應中返回更新後列值的列名。

  • setReturnType(ReturnType):設定傳回型別為 ReturnType.RT_AFTER_MODIFY 時返回原子計數列的更新後值。

服務端在行層級對指定列保證原子性,更新完成後插入一個新的資料版本。

以下樣本對資料表 counter_demo 中主鍵 pk0 的行執行 price 列遞增 10 操作,並在同一請求中讀取更新後的值。

PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("pk0"))
        .build();

RowUpdateChange rowUpdateChange = new RowUpdateChange("counter_demo", primaryKey);

// 對 price 列執行遞增操作,加 10(負數表示遞減)
rowUpdateChange.increment(new Column("price", ColumnValue.fromLong(10)));

// 同一請求中返回更新後的列值
rowUpdateChange.addReturnColumn("price");
rowUpdateChange.setReturnType(ReturnType.RT_AFTER_MODIFY);

UpdateRowResponse response = client.updateRow(new UpdateRowRequest(rowUpdateChange));
Row row = response.getRow();
System.out.println("RequestId: " + response.getRequestId());
System.out.println("Updated price: " + row.getLatestColumn("price").getValue().asLong());

參數說明

名稱

類型

說明

tableName(必選)

String

資料表名稱。

columnName(必選)

String

執行原子計數操作的列名。只支援整型列;列不存在時自動建立並初始化為本次增量值。

value(必選)

long

列值的變更量。正數遞增,負數遞減。

運算結果不能溢出,否則返回 OTSParameterInvalid 錯誤。

returnType(可選)

ReturnType

響應傳回型別。預設不返回更新後的列值。

設定為 ReturnType.RT_AFTER_MODIFY 並配合 addReturnColumn 時,響應中返回原子計數列的更新後值。

使用限制

  • 只支援對整型列執行原子計數;列不存在時預設值為 0,列已存在但非整型則返回 OTSParameterInvalid 錯誤。

  • 增量可正可負,但不能出現計算溢出,溢出時返回 OTSParameterInvalid 錯誤。

  • 原子計數操作只作用於最新版本,不支援指定時間戳記;更新後插入一個新的資料版本。

  • 單次更新要求中,對同一列不能同時執行原子計數和其他動作(如覆蓋寫、刪除等)。

  • BatchWriteRow 請求中,已執行原子計數的行只能在批次中出現一次。

重要

原子計數操作可能因網路逾時、系統錯誤等失敗,重試時可能更新兩次原子計數器,導致計數偏多或偏少。此類異常情境建議使用條件更新精確變更列值。