オンラインアプリケーションでカウンターを使用する場合、アトミックカウンター機能を使用できます。アトミックカウンター機能を使用するには、列をアトミックカウンターとして指定し、その列に対してアトミックカウンター操作を実行します。
Tablestore SDK for Python V5.1.0 以後では、アトミックカウンター機能がサポートされています。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、「OTSClient インスタンスを初期化する」を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。
使用上の注意
アトミックカウンターは、INTEGER 型の列にのみ実装できます。
アトミックカウンターとして指定された列がデータの書き込み前に存在しない場合、列のデフォルト値は 0 になります。アトミックカウンターとして指定された列が INTEGER 型ではない場合、OTSParameterInvalid エラーが発生します。
アトミックカウンターは、正または負の数を使用して更新できますが、整数オーバーフローは避ける必要があります。整数オーバーフローが発生した場合、OTSParameterInvalid エラーが返されます。
デフォルトでは、アトミックカウンターの値は、行更新リクエストへの応答では返されません。アトミックカウンターの更新された値を返すように指定できます。
1 つの更新リクエストで、列をアトミックカウンターとして指定し、その列を更新することはできません。たとえば、列 A をアトミックカウンターとして設定した場合、同じリクエストで上書きや削除などの他の操作をその列に対して実行することはできません。
BatchWriteRow リクエストを送信することで、同じ行に対して複数の更新操作を実行できます。ただし、行に対してアトミックカウンター操作を実行する場合、BatchWriteRow リクエストでは、その行に対して 1 つの更新操作のみ実行できます。
アトミックカウンターの最新バージョンの値のみを更新できます。指定したバージョンのアトミックカウンターの値を更新することはできません。更新操作が完了すると、新しいバージョンのデータが行のアトミックカウンターに挿入されます。
API 操作
アトミックカウンター関連の操作が updateRow 操作に追加されました。次の表に、アトミックカウンター関連の操作を示します。
操作 | 説明 |
update_of_attribute_columns | 更新タイプとして INCREMENT を指定して、列の値を特定の整数値だけ増減します。 |
パラメーター
パラメーター | 説明 |
table_name | データテーブルの名前。 |
column_name | アトミックカウンター操作を実行する列の名前。INTEGER 型の列のみ指定できます。 |
value | 列の値の増分または減分。 |
例
次のサンプルコードは、updateRow 操作を呼び出してデータを更新するときに、更新タイプとして INCREMENT を使用して INTEGER 型の属性列の値を更新する方法の例を示しています。
def increment_by_update_row(client):
# データテーブルの名前を指定します。
table_name ='<TABLE_NAME>'
primary_key = [('pk0', 1)]
# 更新タイプとして INCREMENT を使用します。この例では、price 列の値を 6 増やすように指定しています。
update_of_attribute_columns = {
'INCREMENT': [('price', 6)]
}
row = Row(primary_key, update_of_attribute_columns)
consumed, return_row = client.update_row(table_name, row, None)
print ('Update succeed, consume %s write cu.' % consumed.write)