我需要将 DynamoDB 用于聊天应用程序,该应用程序将在活动当天偶尔使用。该应用程序将在某一天读取/写入数千条消息,之后几乎不会再读取/写入消息。
这就是我的想法:
Table: Messages
HashKey: Event day name
SortKey: Message timestamp
我可以获取最近 20 条消息(聊天应用程序通常只获取最新数据,不是吗?),但所有读/写将仅定向到一个分区。
我可以尝试这样
Table: EventDayMessage
HashKey: Message timestamp
这样,读/写将扩展到更新的消息,但由于没有排序键,我无法获取最近的消息。
在我的场景中方法 2 更好吗?我可以使用什么作为排序键?还有其他更好的建议(除了切换数据库)吗?
我的第一个建议是转移到一个合适的数据库(如elasticsearch)来回答这个用法(基于时间的搜索)并为每天创建一个新索引
但如果你仍然想使用 dynamodb,一个好的 hack 可以是:
- 如果您的应用程序每天写入/读取数千条消息,那么您不会获得很多分区(还取决于您的数据大小)。
假设您将有 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 ..),然后到达最近的顶部。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)