【发布时间】:2016-01-17 11:22:27
【问题描述】:
我需要将 DynamoDB 用于偶尔在活动当天使用的聊天应用程序。该应用将在特定的一天读取/写入数千条消息,之后几乎没有。
这是我的想法:
Table: Messages
HashKey: Event day name
SortKey: Message timestamp
我可以获取最近的 20 条消息(聊天应用程序通常只获取最新数据,不是吗?),但所有读/写将仅定向到一个分区。
我可以试试这个方法
Table: EventDayMessage
HashKey: Message timestamp
这样,读/写将分散到最近的消息,但由于没有排序键,我无法获取最近的消息。
在我的场景中方法 2 更好吗?我可以将什么用于排序键?还有其他更好的建议吗(除了切换数据库)?
【问题讨论】:
-
当您说“将在特定日期读取/写入数千条消息”时,您预计每秒读取/写入的峰值数量是多少?这听起来像是数字是个位数,这意味着您可能不会遇到热分片问题,但如果数字是成百上千,您将需要考虑使用不同的哈希键来避免热分片问题。
-
@JaredHatfield 如果没有hot shard问题,方法1可以吗?
-
是的。 SortKey/RangeKey 可以很好地与时间戳配合使用,因为它是排序的,您可以过滤大于/小于以有效地直接检索项目。这种方法的真正风险是节流,因为它不能很好地扩展。另一个问题是表中积累了大量旧数据。不过,将旧记录卸载到不同的表可能有助于解决这个问题。
标签: amazon-web-services amazon-dynamodb nosql