【发布时间】:2016-02-01 23:43:17
【问题描述】:
我正在尝试更新我的简单数据库中的计数器(一个键,一个数值)。 Atomic counters 似乎是自然的解决方案,但我需要线程安全更新,即我需要确保更新不会相互干扰。
This answer 似乎暗示我需要在执行实际写入之前仔细检查数据是否被另一个更新修改。
我的问题是,如何在ConditionExpression 中引用数据库中的当前值?
假设table 是dynamodb.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"
)
【问题讨论】:
标签: python amazon-web-services amazon-dynamodb database-concurrency distributed-database