如何在没有热 table 行的情况下在 DynamoDB 中保持 运行 计数?

How do I keep a running count in DynamoDB without a hot table row?

我们有一个完全无服务器的架构,几乎从 DynamoDB 发布以来就一直在使用它,但我正在努力了解如何处理大规模的全球数字制表。假设我们有选择做 A 或 B 的用户。我们想跟踪有多少用户做每件事,并且他们可能会大规模发生。根据 DyanamoDB 最佳实践,您不应该连续写入一行。在外部使用 CouchDB 或 ElastiCache 等其他服务处理此问题的最佳方法是什么?

您可以按用户名的首字母(或类似的字母)作为分区键,将 A 或 B 作为排序键,将常规属性作为计数来对用户进行分桶。

例如:

PARTITION KEY | SORT KEY | COUNT
--------------------------------
a             | A        | 5
a             | B        | 7
b             | B        | 15
c             | A        | 1
c             | B        | 3

优点是您可以通过将写入分散到多个分区来降低热分区的风险。

当然,您正在用热写入换取更昂贵的读取,因为现在您必须扫描 + 过滤 (A) 以获得选择 A 的总计数,而另一个扫描 + 过滤 (B) 用于B 的总数。但是如果你正在写一堆并且只在极少数情况下阅读,这可能没问题。