1

我正在尝试更新我的简单数据库中的计数器(一个键,一个数值)。原子计数器似乎是自然的解决方案,但我需要线程安全更新,即我需要确保更新不会相互干扰。

这个答案似乎表明我需要在执行实际写入之前仔细检查数据是否被另一个更新修改。

我的问题是,如何在 a 中引用 db 中的当前值ConditionExpression?假设tabledynamodb.Table对象(Python API),这是我编写的代码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 回答