オンラインアプリケーションのカウンターを実装する場合、アトミックカウンター機能を使用できます。この機能を使用するには、列をアトミックカウンターとして設定し、その列に対してアトミックカウンター操作を実行します。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化するを参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルを作成するを参照してください。
使用上の注意
アトミックカウンターは INTEGER 型の列にのみ実装できます。
データを書き込む前に、アトミックカウンターとして指定された列が存在しない場合、列のデフォルト値は 0 になります。アトミックカウンターとして指定された列が INTEGER 型でない場合、OTSParameterInvalid エラーが発生します。
アトミックカウンターは正または負の数を使用して更新できますが、整数オーバーフローは避ける必要があります。整数オーバーフローが発生した場合、OTSParameterInvalid エラーが返されます。
デフォルトでは、アトミックカウンターの値は行更新リクエストへのレスポンスでは返されません。アトミックカウンターの更新された値を返すように指定できます。
1 つの更新リクエストで、列をアトミックカウンターとして指定し、その列を更新することはできません。たとえば、列 A をアトミックカウンターとして設定した場合、同じリクエストで上書きや削除などの他の操作をその列に対して実行することはできません。
BatchWriteRow リクエストを送信することで、同じ行に対して複数の更新操作を実行できます。ただし、行に対してアトミックカウンター操作を実行する場合、BatchWriteRow リクエストではその行に対して 1 つの更新操作のみ実行できます。
アトミックカウンターの最新バージョンの値のみを更新できます。指定したバージョンのアトミックカウンターの値を更新することはできません。更新操作が完了すると、新しいバージョンのデータが行のアトミックカウンターに挿入されます。
構文
/**
* データの行を更新します。
* @api
* @param [] $request リクエストパラメータ。
* @return [] レスポンス。
* @throws OTSClientException パラメータエラーが発生した場合、または Tablestore サーバーが検証エラーを返した場合にスローされる例外。
* @throws OTSServerException Tablestore サーバーがエラーを返した場合にスローされる例外。
*/
public function updateRow(array $request);
updateRow 操作を呼び出して、アトミックカウンターに対する操作を実行できます。次の表に、操作について説明します。
操作 | 説明 |
update_of_attribute_columns | 更新タイプとして INCREMENT を指定して、列の値を特定の整数値だけ増減します。設定形式:
|
return_content | 更新された列の値を返します。値を変更する列の名前を指定し、return_type パラメータを
|
パラメータ
パラメータ | 説明 |
table_name | テーブルの名前。 |
column_name | アトミックカウンター操作を実行する列の名前。INTEGER 型の列のみ指定できます。 |
value | 列の値の増分または減分。 |
return_content | アトミックカウンター操作が実行された列に関する返される情報。このパラメータには、return_type パラメータと return_column_names パラメータが含まれます。
|
例
次のサンプルコードは、データの書き込み時に INTEGER 型の列の値を更新し、更新された値を読み取る方法の例を示しています。
$request = array (
// テーブルの名前を指定します。
'table_name' => 'MyTable',
// 行存在条件を RowExistenceExpectationConst::CONST_IGNORE に設定します。これは、行の存在チェックを行わないことを指定します。
'condition' => RowExistenceExpectationConst::CONST_IGNORE,
// プライマリキーを指定します。指定するプライマリキー列の数と型は、テーブル内の実際のプライマリキー列の数と型と同じである必要があります。
'primary_key' => array (
// 最初のプライマリキー列の名前は PK0、データ型は INTEGER、列の値は 123 です。
array('PK0', 123),
// 2 番目のプライマリキー列の名前は PK1、データ型は STRING、列の値は 'inc' です。
array('PK1', 'inc')
),
// 値を更新する属性列。PUT、DELETE、DELETE_ALL の 3 つの操作タイプがサポートされています。
'update_of_attribute_columns'=> array(
'INCREMENT' => array (
// アトミックカウンター操作を実行する列を指定します。列名は attr0、列の値の増分は 1、データ型は INTEGER です。
array('attr0', 1, ColumnTypeConst::CONST_INTEGER),
),
'PUT' => array(
array('attr1', 1, ColumnTypeConst::CONST_INTEGER),
)
),
// アトミックカウンター操作の実行後に列情報を返します。
'return_content' => array(
'return_type' => ReturnTypeConst::CONST_AFTER_MODIFY,
'return_column_names' => array('attr0')
)
);
$response = $otsClient->updateRow ($request);
print json_encode ($response);