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

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

最終更新日:Dec 28, 2024

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

前提条件

使用上の注意

  • アトミックカウンターは 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 を指定して、列の値を特定の整数値だけ増減します。設定形式:

'update_of_attribute_columns'=> array(
    'INCREMENT' => array (     
        array('<column_name>', <value>, ColumnTypeConst::CONST_INTEGER), 
    ),
)

return_content

更新された列の値を返します。値を変更する列の名前を指定し、return_type パラメータを ReturnTypeConst::CONST_AFTER_MODIFY に設定する必要があります。設定形式:

'return_content' => array(
    'return_type' => ReturnTypeConst::CONST_AFTER_MODIFY,
    'return_column_names' => array('<column_name>')
 )

パラメータ

パラメータ

説明

table_name

テーブルの名前。

column_name

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

value

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

return_content

アトミックカウンター操作が実行された列に関する返される情報。このパラメータには、return_type パラメータと return_column_names パラメータが含まれます。

  • return_type: アトミックカウンター操作が実行された列の更新された値を返すには、このパラメータを ReturnTypeConst::CONST_AFTER_MODIFY に設定します。

  • 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);