オンラインアプリケーションでカウンターを使用する場合は、アトミックカウンター機能を使用できます。この機能を使用するには、列をアトミックカウンターとして指定し、その列に対してアトミックカウンター操作を実行します。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれます。詳細については、データテーブルの作成およびデータの書き込みを参照してください。
使用上の注意
アトミックカウンターは、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);
}