我要求将DynamoDB用于在活动当天偶尔使用的聊天应用。该应用程序将在特定日期读取/写入数千条消息,之后几乎没有消息。
以下是我的想法:
Table: Messages
HashKey: Event day name
SortKey: Message timestamp
我最近可以收到20条消息(聊天应用程序通常只获取最新数据,没有?),但所有读/写操作都只会定向到一个分区。
我可以这样试试
Table: EventDayMessage
HashKey: Message timestamp
这样,读/写将分散到更新的消息,但由于没有排序键,我无法获取最近的消息。
方法2在我的场景中更好吗?我可以使用什么来排序键?还有其他更好的建议(除了切换db)吗?
答案 0 :(得分:0)
我的第一个建议是转移到适当的数据库(如elasticsearch)来回答这种用法(基于时间的搜索)并为每天创建一个新索引
但是如果你仍然想使用dynamodb,一个好的黑客可以是:
假设您将拥有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 ..)然后到最近的顶部。