如何在没有热 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 的总数。但是如果你正在写一堆并且只在极少数情况下阅读,这可能没问题。
我们有一个完全无服务器的架构,几乎从 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 的总数。但是如果你正在写一堆并且只在极少数情况下阅读,这可能没问题。