DynamoDB UpdateItem 增量与 if_not_exists 的一致性

问题描述 投票:0回答:1

背景

我在事件发生时更新插入一个项目(使用 UpdateItem)。 如果以前从未发生过,它将插入 1 个计数,否则增加一个计数器。 由于独特插入的数量极大地压倒了重复点击,如果可能的话,我希望将其保留在单个调用中。

问题

我调出一条经常被击中的特定记录(每天约 10 万),发现本周它的值比上周少(少了 30 万)。记录上的唯一更新发生在一个地方,尽管是同时发生的。

更新表达式

"SET counter = if_not_exists(counter, :inc) + :inc" //Where :inc = 1 hardcoded always.

我的想法

“所有写入请求都按照收到的顺序应用。” https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html#WorkingWithItems.AtomicCounters

我知道根据上面的链接也有可能出现过度计算,但我不希望该值下降。

我认为使用

if_not_exists
会导致 UpdateItem 在更新中状态下读取不存在的“计数器”属性,导致其重置为 1。我找不到任何文档/论坛帖子来支持或反驳这一点(事实上,我只找到表明这种情况不会发生的信息),但我无法认为/找到这种行为的任何其他原因。

感谢您就此事分享的任何澄清/知识。我也会考虑处理这个用例的任何建议,干杯。

amazon-web-services amazon-dynamodb
1个回答
0
投票

对 DynamoDB 中单个项目的所有写入都是强序列化的,因此计数器从首次设置为 1 时起就始终存在。

我建议您实现一些日志记录,以了解对 UpdateItem 的调用率,并确保您正在尝试更新您期望的密钥。

© www.soinside.com 2019 - 2024. All rights reserved.