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

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

最終更新日:May 01, 2026

アトミックカウンター機能を使用すると、読み取り・変更・書き込みサイクルを必要とせずに、単一のスレッドセーフな操作で INTEGER 型の列の値を増加または減少させることができます。

前提条件

注意事項

  • アトミックカウンターは INTEGER 型の列でのみ実装できます。

  • アトミックカウンターとして指定された列がデータ書き込み前に存在しない場合、その列のデフォルト値は 0 になります。また、アトミックカウンターとして指定された列が INTEGER 型でない場合、OTSParameterInvalid エラーが発生します。

  • 正または負の数値を使用してアトミックカウンターを更新できますが、整数オーバーフローを回避する必要があります。整数オーバーフローが発生した場合、OTSParameterInvalid エラーが返されます。

  • デフォルトでは、行更新リクエストに対する応答にアトミックカウンターの値は含まれません。ただし、更新後のアトミックカウンターの値を返すように指定できます。

  • 同一の更新リクエスト内で、ある列をアトミックカウンターとして指定しつつ、その列に対して他の更新操作(上書きや削除など)を同時に行うことはできません。たとえば、列 A をアトミックカウンターに設定した場合、その列に対して同時に上書きや削除などの他の操作を行うことはできません。

  • BatchWriteRow リクエストを送信することで、同じ行に対して複数の更新操作を実行できます。ただし、ある行に対してアトミックカウンター操作を実行する場合は、その BatchWriteRow リクエスト内でその行に対する更新操作は 1 回のみ実行できます。

  • アトミックカウンターの最新バージョンの値のみを更新できます。特定のバージョンのアトミックカウンター値を更新することはできません。更新操作が完了すると、その行のアトミックカウンターに新しいバージョンのデータが挿入されます。

API オペレーション

アトミックカウンター操作は RowUpdateChange クラスを通じて提供されます。

操作

説明

RowUpdateChange Increment(Column)

INTEGER 型の列の値を指定された量だけ増加または減少させます。

List<String> ReturnColumnNames

アトミックカウンター操作後に返す列を指定します。

ReturnType

アトミックカウンターの結果の返却形式を指定します。

パラメーター

パラメーター

説明

TableName

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

ColumnName

アトミックカウンター操作を適用する列です。INTEGER 型の列のみがサポートされます。

Value

列の値に加算または減算する量です。減算するには負の数値を使用します。

ReturnColumnNames

操作後に返す列です。

ReturnType

操作後の更新された列の値を返すには、ReturnType.RT_AFTER_MODIFY に設定します。

次の例では、INTEGER 型の列を増加させ、更新後の値を返します。

public static void Increment(int incrementValue)
{
    Console.WriteLine("Start set increment column...");
    OTSClient otsClient = Config.GetClient();

    // 行のプライマリキーを指定します。プライマリキーは、テーブル作成時に TableMeta で指定したものと一致している必要があります。
    PrimaryKey primaryKey = new PrimaryKey
    {
        { Pk1, new ColumnValue(0) },
        { Pk2, new ColumnValue("abc") }
    };
    RowUpdateChange rowUpdateChange = new RowUpdateChange(TableName, primaryKey); // データテーブルの名前を指定します。
    // アトミックカウンター操作が実行された列の値を返すために、ReturnType パラメーターを ReturnType.RT_AFTER_MODIFY に設定します。
    rowUpdateChange.ReturnType = ReturnType.RT_AFTER_MODIFY;
    rowUpdateChange.ReturnColumnNames = new List<string>() { IncrementCol};
    // アトミックカウンター操作を実行する列を指定します。列の値は 0 から始まり、incrementValue パラメーターで指定された数値分増加します。
    rowUpdateChange.Increment(new Column(IncrementCol, new ColumnValue(incrementValue)));

    UpdateRowRequest updateRowRequest = new UpdateRowRequest(rowUpdateChange);

    var response = otsClient.UpdateRow(updateRowRequest);
    Console.WriteLine("set Increment column succeed Increment result:" + response.Row.GetColumns()[0].Value);
}