すべてのプロダクト
Search
ドキュメントセンター

Tablestore:アトミックカウンターの使用

最終更新日:Aug 06, 2026

Tablestore SDK for Java は、行レベルで整数属性列をアトミックにインクリメントまたはデクリメントし、同一リクエスト内で更新後の値を返すことができます。

前提条件

Tablestore SDK for Java をインストールし、クライアントを初期化します。

説明

increment(Column) を呼び出して、指定した整数列をアトミックに更新します。正の値でインクリメント、負の値でデクリメントが行われます。Tablestore は行レベルの原子性を保証し、更新後に新しいデータバージョンを書き込みます。同一リクエスト内で更新後の値を返すには、addReturnColumn(String) を呼び出し、returnTypeRT_AFTER_MODIFY に設定します。

public UpdateRowResponse updateRow(UpdateRowRequest updateRowRequest) throws TableStoreException, ClientException
public RowUpdateChange increment(Column column)
public void addReturnColumn(String columnName)
public void setReturnType(ReturnType returnType)

次の例では、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("Updated price: " + row.getLatestColumn("price").getValue().asLong());

パラメーター

リクエスト設定

UpdateRowRequest には次のパラメーターが含まれます。

名前

タイプ

説明

rowChange (必須)

RowUpdateChange

単一行更新の設定です。

transactionId (オプション)

String

ローカルトランザクション ID です。ローカルトランザクション内でアトミックカウンター操作を実行する場合にのみ、このパラメーターを指定します。

ID の取得方法と使用方法については、「ローカルトランザクションの使用」をご参照ください。

行更新設定

UpdateRowRequestrowChange パラメーターは、RowUpdateChange 型です。

名前

タイプ

説明

tableName (必須)

String

データテーブルの名前です。

primaryKey (必須)

PrimaryKey

対象行のプライマリキーです。

columnsToUpdate (必須)

List<Pair<Column, Type>>

更新する属性列です。increment(Column) を呼び出してアトミックカウンター操作を追加します。

condition (オプション)

Condition

条件付き更新の設定です。行が条件を満たす場合にのみ、アトミックカウンター操作が実行されます。

条件の設定方法については、「条件付き更新の使用」をご参照ください。

returnType (オプション)

ReturnType

リターンタイプです。デフォルト値: RT_NONE。更新後の値を返すには、このパラメーターを RT_AFTER_MODIFY に設定します。

returnColumnNames (オプション)

Set<String>

更新後の値を返す対象となる列の名前です。addReturnColumn() を呼び出して列名を追加し、このパラメーターを RT_AFTER_MODIFY と組み合わせて使用します。

カウンター列

increment() によって UpdateRowRequest.rowChange.columnsToUpdate に追加される各要素には、Column が含まれます。

名前

タイプ

説明

name (必須)

String

アトミックカウンター操作を実行する属性列の名前です。

value (必須)

ColumnValue

整数のインクリメント値です。正の値でインクリメント、負の値でデクリメントが行われます。結果がオーバーフローしないようにしてください。対象列が存在しない場合、初期値は 0 として扱われます。

応答

名前

タイプ

説明

row

Row

RT_AFTER_MODIFY が指定されている場合、このフィールドには addReturnColumn() で指定した列の更新後の値が含まれます。getRow() を呼び出して値を取得します。

制限事項

  • アトミックカウンター操作は整数型の列のみをサポートします。列が存在するものの整数型でない場合、操作は OTSParameterInvalid エラーを返します。

  • アトミックカウンター操作は最新バージョンにのみ適用され、ユーザー指定のタイムスタンプは受け付けません。

  • 単一の更新リクエスト内では、同じ列に対してアトミックカウンター操作と他の操作 (上書きや削除など) を組み合わせることはできません。

  • BatchWriteRow リクエストでは、アトミックカウンター操作を含む行は 1 回のみ指定できます。

重要

アトミックカウンター操作は、ネットワークタイムアウトやシステムエラーにより失敗する可能性があります。リトライによってインクリメント値が二重に適用され、カウンターが意図した値よりも高く (または低く) なる場合があります。二重カウントを回避するには、条件付き更新を使用して、現在の状態に基づいて値を更新してください。