Tablestore SDK for Go を使用して、行レベルで INTEGER の属性列をアトミックに増分または減分し、同一リクエスト内で更新後の値を返します。
前提条件
Tablestore SDK for Go をインストールし、クライアントを初期化します。
説明
IncrementColumn を呼び出して、INTEGER の属性列に対してアトミックカウンター操作を実行します。正の値は列を増分し、負の値は列を減分します。サーバーは行レベルの原子性を保証し、新しいデータバージョンを書き込みます。同一リクエスト内で更新後の値を返すには、AppendIncrementColumnToReturn を呼び出して列を指定し、SetReturnIncrementValue を呼び出して戻り値の型を設定します。
func (rowchange *UpdateRowChange) IncrementColumn(columnName string, value int64)
func (rowchange *UpdateRowChange) AppendIncrementColumnToReturn(name string)
func (rowchange *UpdateRowChange) SetReturnIncrementValue()
次のサンプルは、example_table テーブルの row1 行にある score 列を 10 増分し、更新後の値を返します。
primaryKey := &tablestore.PrimaryKey{}
primaryKey.AddPrimaryKeyColumn("id", "row1")
change := &tablestore.UpdateRowChange{
TableName: "example_table",
PrimaryKey: primaryKey,
}
change.IncrementColumn("score", int64(10))
change.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
change.AppendIncrementColumnToReturn("score")
change.SetReturnIncrementValue()
response, err := client.UpdateRow(&tablestore.UpdateRowRequest{UpdateRowChange: change})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.Columns[0].Value)
パラメーター
UpdateRowChange には、アトミックカウンターに関連する次のパラメーターが含まれます。
|
名前 |
型 |
説明 |
|
TableName (必須) |
|
テーブル名。 |
|
PrimaryKey (必須) |
|
対象行の完全なプライマリキー。 |
|
Columns (必須) |
|
属性列の操作。 |
|
Condition (必須) |
|
更新条件。詳細については、「条件付き更新の使用」をご参照ください。 |
|
ReturnType (任意) |
|
戻り値の型。 |
|
ColumnNamesToReturn (任意) |
|
更新後の値を返すアトミックカウンター列。 |
|
TransactionId (任意) |
|
ローカルトランザクション ID。ローカルトランザクション内でアトミックカウンター操作を実行する場合にのみ、このパラメーターを指定します。 |
レスポンス
UpdateRowResponse には、アトミックカウンターに関連する次のビジネスフィールドが含まれます。
|
フィールド |
型 |
説明 |
|
|
|
|
制限
INTEGER の属性列のみサポートされています。対象列が存在しない場合、初期値は 0 です。列が存在しても INTEGER 列ではない場合、パラメーターエラーが返されます。
増分は正または負にできますが、結果がオーバーフローしないことが条件です。
アトミックカウンターは最新バージョンに対してのみ動作し、指定したタイムスタンプはサポートされません。この操作により新しいデータバージョンが書き込まれます。
同一リクエスト内で、アトミックカウンター操作と、上書きや削除などの別の操作を同じ列に対して実行することはできません。
BatchWriteRowリクエストでは、アトミックカウンター操作を含む行は 1 回のみ指定できます。
ネットワークタイムアウトまたはシステムエラーにより、クライアントがリトライしてアトミックカウンター操作を複数回実行する場合があります。最終的な列の値を厳密に制御する必要がある場合は、条件付き更新を使用して楽観的ロックを実装してください。