1

単純なデータベース (1 つのキー、1 つの数値) でカウンターを更新しようとしています。アトミック カウンターは自然な解決策のように思えますが、スレッド セーフな更新が必要です。つまり、更新が互いに干渉しないようにする必要があります。

この回答は、実際の書き込みを実行する前に、データが別の更新によって変更されていないことを再確認する必要があることを示唆しているようです。

私の質問は、データベースの現在の値を a で参照するにはどうすればよいConditionExpressionですか? tableがオブジェクト (Python API) であると仮定するとdynamodb.Table、これは私が書いたコードですupdate_item:

table.update_item(
            Key={
                'key': my_key
            },
            UpdateExpression="set my_value = my_value + :inc",

            ConditionExpression="my_value = ?????" # should be value in the db now
            ExpressionAttributeValues={
                ':inc': my_increment,
            },
            ReturnValues="UPDATED_NEW"
        )
4

1 に答える 1

2

アトミック カウンターを使用するだけの場合は、条件は必要ありません。あなたがリンクしたその答えは、銀行口座の残高を増やすなど、いくつかの非常に重要な状況で、最初の試行がインクリメントに成功しました。たとえば、値をインクリメントしようとして、DynamoDB から応答を受け取る前にネットワーク接続が失われた場合などです。その場合、成功したかどうかわからないため、条件付きで再試行する必要があります。

アトミックカウンターが条件式を使用せずに提供するスレッドセーフな更新だけが必要であると述べています。

于 2016-02-02T00:03:43.203 に答える