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

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

最終更新日:Dec 28, 2024

オンラインアプリケーションでカウンターを使用する場合は、アトミックカウンター機能を使用できます。この機能を使用するには、列をアトミックカウンターとして指定し、その列に対してアトミックカウンター操作を実行します。

前提条件

使用上の注意

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

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

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

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

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

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

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

API 操作

アトミックカウンター機能を使用するために呼び出すことができる API 操作は、rowUpdateChange クラスに追加されます。次の表に、操作を示します。

操作

説明

RowUpdateChange Increment(Column column)

列の値を数値分だけ増減します。

List<String> ReturnColumnNames

アトミックカウンターを実装するために操作が実行される列の中から、値を返したい列の名前を指定します。

ReturnType ReturnType

アトミックカウンターの値を返すデータ型を指定します。

パラメーター

パラメーター

説明

TableName

データテーブルの名前。

ColumnName

アトミックカウンター操作を実行する列の名前。INTEGER 型の列のみを指定できます。

Value

列の値の増分または減分。

ReturnColumnNames

アトミックカウンターを実装するために操作が実行される列の中から、値を返したい列の名前を指定します。

ReturnType

このパラメーターを ReturnType.RT_AFTER_MODIFY に設定すると、アトミックカウンターの値が返されます。

次のサンプルコードは、データの書き込み時に rowUpdateChange 操作を呼び出して 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);
}