在dynamodb中获取和存储项目计数的有效方法



我有一个dynamo db表,结构如下

partitionKey - userId+keyName
sortKey - keyName+itemId
itemData - any object
createdAt - long value
updatedAt - long value

在这个表中,我想保存物品列表,假设在商店中找到的所有唯一可食用物品。根据要求,我需要找出特定商店的商品数量。根据我的发现,我遇到了三种方法来做到这一点

  1. 使用Query根据此链接获取计数,而不显式保存计数值。
  2. 在显式保存物品和存储/更新计数时使用事务。[我们想在单个请求中添加/删除多个项目]。然后使用GetItem api获取计数。
  3. 使用dynamo db流触发SNS,并最终在同一表/不同表中存储显式计数。然后使用GetItem api获取计数。

注意

  • 延迟在这里和成本一样重要。
  • 你可以假设这个dynamo db表可以有数百万个项目。
  • 最终一致性很好。

在我看来,第三种选择在成本和延迟方面看起来更有效。但是想知道我的想法是否正确

使用Dynamo流将聚合数据写回Dynamo绝对是可行的方法!

这当然最终是一致的,因为更新项和等待流更新聚合是两个不同的非原子操作。

第四个选项是更新类似ElasticSearch索引的东西(也通过使用流),它允许您执行任意的特别查询。

如果你需要一致性的聚合,你必须使用事务,所有的限制强加。

最新更新