如何制作一个简单但可扩展的私人消息系统(nosql)?

时间:2016-11-27 00:09:13

标签: mongodb database-design nosql

我正在为一个大型的nosql网站构建一个简单的私人消息系统,我正在考虑桌面设计。读取次数可能等于(或两次)写入次数,但读取将需要所有(最近的)消息。

  • 我的第一个想法是创建一个表threads(列:threadId,user1,user2)和表messages(列:messageId,threadId,messageText)。但是,有些模拟显示messages索引不适合RAM。
  • 我的下一个想法是只创建一个表threads(列:user1,user2,contents),并在每次有人回复对话时更新列contents(使用$push在一个数组)。这比插入慢,特别是因为该文本字段的长度在每次回复时都会增长。

我的第二个想法是处理这种情况的正确方法吗?或者是否有更有效的方法将小文本附加到大文本?我目前正在使用mongodb,但如果有必要,我愿意改变。

1 个答案:

答案 0 :(得分:1)

为什么不使用这两种方式的组合?大多数情况下你需要阅读最近的消息并且需要其他消息!

所以我建议创建所有这3个表格(例如recentthreadsmessages,最近基于您的第二种方法)!

最近在recent中保留了20条最新消息!如果您有超过20封邮件,请从recent删除旧邮件,并将其放入threadsmessages

对于迁移,我建议您在批量操作中执行此操作。例如,在mongo上创建一个脚本并每小时运行一次。