【发布时间】:2021-06-30 21:42:24
【问题描述】:
我正在寻找构建一个可扩展的实时聊天应用程序(我这样做只是为了好玩和感兴趣,所以请不要问为什么!)而且我知道我将处理实时消息传递部分通过redis,但我不确定使用什么数据库来获取以下信息:
- 用户关系(朋友)
- 冷聊历史记录 - 只会以有限的数量(可能像 50 条消息)查询,按时间戳排序并反向查询(就像滚动查看旧消息时您的消息会加载到 imessage 或 whatsapp 中一样)
- 聊天用户关系
我知道对于冷聊天历史,RDBMS 或 Cassandra 可能是我最好的选择,但在 RDBMS 或 cassandra 中处理朋友关系以及用户与聊天的关系是很丑陋的。我不确定是否有必要、是否值得,甚至“正确”在我的技术堆栈中拥有一个图形数据库,只是为了这种关系映射。
我在考虑 MongoDB 或其他一些基于文档的存储可能是一种解决方案,但查询数据似乎真的很费力。我的想法是拥有一个包含用户列表的聊天文档,然后我将拥有几个其他文档,其中包含指向消息文档的消息 ID 列表。这些文档将映射回chatID。我相信您可以看到,查询一组消息的时间和资源会相当高。也许我只是低估了 MongoDB 的力量,因为我还没有真正使用过它。通过将用户 ID 存储在文档内的列表中,我还可以更轻松地使用文档和友谊来处理聊天用户关系。
我知道这项工作没有完美的工具,但我希望有人就如何设计数据存储提出想法和意见。
提前谢谢你!
【问题讨论】:
标签: database mongodb database-design chat