如何在DynamoDB中为聊天应用程序选择分区键

时间:2016-01-17 11:22:28

标签: amazon-web-services amazon-dynamodb nosql

我要求将DynamoDB用于在活动当天偶尔使用的聊天应用。该应用程序将在特定日期读取/写入数千条消息,之后几乎没有消息。

以下是我的想法:

Table: Messages
HashKey: Event day name
SortKey: Message timestamp

我最近可以收到20条消息(聊天应用程序通常只获取最新数据,没有?),但所有读/写操作都只会定向到一个分区。

我可以这样试试

Table: EventDayMessage
HashKey: Message timestamp

这样,读/写将分散到更新的消息,但由于没有排序键,我无法获取最近的消息。

方法2在我的场景中更好吗?我可以使用什么来排序键?还有其他更好的建议(除了切换db)吗?

1 个答案:

答案 0 :(得分:0)

我的第一个建议是转移到适当的数据库(如elasticsearch)来回答这种用法(基于时间的搜索)并为每天创建一个新索引

但是如果你仍然想使用dynamodb,一个好的黑客可以是:

  • 如果您的应用每天写入/读取数千个ms,那么您将不会获得多个分区(也取决于您的数据大小)。

假设您将拥有3个分区。 你的钥匙可以是这样的:

HashKey: Event day name + 'part_X' (where x is a number between 1-5. it can be a round rubin, or some '%' on a user_id or something like that)
SortKey: Message timestamp

所以在你的情况下,得到最后20条评论: 你应该从每个分区得到20条评论(hash = event_day_name_part_1,event_day_name_part_2 ..)然后到最近的顶部。