オンラインアプリケーションでカウンターを使用する場合、アトミックカウンター機能を使用できます。この機能を使用するには、列をアトミックカウンターとして指定し、その列に対してアトミックカウンター操作を実行します。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みを参照してください。
使用上の注意
アトミックカウンターは INTEGER 型の列にのみ実装できます。
アトミックカウンターとして指定された列がデータの書き込み前に存在しない場合、列のデフォルト値は 0 になります。アトミックカウンターとして指定された列が INTEGER 型でない場合、OTSParameterInvalid エラーが発生します。
アトミックカウンターは正または負の数を使用して更新できますが、整数のオーバーフローは避ける必要があります。整数のオーバーフローが発生した場合、OTSParameterInvalid エラーが返されます。
デフォルトでは、アトミックカウンターの値は行の更新リクエストへのレスポンスでは返されません。アトミックカウンターの更新された値を返すように指定できます。
1 つの更新リクエストで、列をアトミックカウンターとして指定し、その列を更新することはできません。たとえば、列 A をアトミックカウンターとして設定した場合、同時に上書きや削除などの他の操作をその列に対して実行することはできません。
BatchWriteRow リクエストを送信することで、同じ行に対して複数の更新操作を実行できます。ただし、行に対してアトミックカウンター操作を実行する場合、BatchWriteRow リクエストではその行に対して 1 つの更新操作のみ実行できます。
アトミックカウンターの最新バージョンの値のみ更新できます。指定したバージョンのアトミックカウンターの値を更新することはできません。更新操作が完了すると、新しいバージョンのデータが行のアトミックカウンターに挿入されます。
API 操作
アトミックカウンター関連の操作が updateRow 操作に追加されました。次の表に、アトミックカウンター関連の操作を示します。
操作 | 説明 |
updateOfAttributeColumns | 更新タイプに INCREMENT を指定して、列の値を特定の整数値だけ増減します。 |
returnContent | アトミックカウンターを実装するために操作が実行される列のうち、値を返したい列の名前を指定します。 |
パラメーター
パラメーター | 説明 |
tableName | データテーブルの名前。 |
columnName | アトミックカウンター操作を実行する列の名前。アトミックカウンターは INTEGER 型の列にのみ実装できます。 |
value | 列の値の増分または減分。 |
returnColumns | アトミックカウンターを実装するために操作が実行される列のうち、値を返したい列の名前を指定します。 |
returnType | 戻り値の型を TableStore.ReturnType.AfterModify に設定して、アトミックカウンターを実装するために操作が実行される列の値を返します。 |
例
次のサンプルコードは、updateRow 操作を呼び出してデータを更新するときに、更新タイプとして INCREMENT を使用して INTEGER 型の属性列の値を更新する方法の例を示しています。
var params = {
tableName: "<Your-Table-Name>",
condition: new TableStore.Condition(TableStore.RowExistenceExpectation.EXPECT_EXIST, null),
primaryKey: [{'pk0': Long.fromNumber(1)}],
// price 列をアトミックカウンターとして指定し、アトミックカウンターの値を 10 増やします。タイムスタンプは指定できません。
updateOfAttributeColumns: [
{'INCREMENT': [{'price': Long.fromNumber(10)}]}
],
// 戻り値の型を TableStore.ReturnType.AfterModify に設定し、アトミックカウンターを実装するために操作が実行される列の値を返します。
returnContent: {
returnColumns: ["price"],
returnType: TableStore.ReturnType.AfterModify
}
};
client.updateRow(params,
function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', JSON.stringify(data, null, 2));
});