我正在为一个大型的nosql网站构建一个简单的私人消息系统,我正在考虑桌面设计。读取次数可能等于(或两次)写入次数,但读取将需要所有(最近的)消息。
threads
(列:threadId,user1,user2)和表messages
(列:messageId,threadId,messageText)。但是,有些模拟显示messages
索引不适合RAM。threads
(列:user1,user2,contents),并在每次有人回复对话时更新列contents
(使用$push
在一个数组)。这比插入慢,特别是因为该文本字段的长度在每次回复时都会增长。我的第二个想法是处理这种情况的正确方法吗?或者是否有更有效的方法将小文本附加到大文本?我目前正在使用mongodb,但如果有必要,我愿意改变。
答案 0 :(得分:1)
为什么不使用这两种方式的组合?大多数情况下你需要阅读最近的消息并且不需要其他消息!
所以我建议创建所有这3个表格(例如recent
,threads
,messages
,最近基于您的第二种方法)!
最近在recent
中保留了20条最新消息!如果您有超过20封邮件,请从recent
删除旧邮件,并将其放入threads
和messages
。
对于迁移,我建议您在批量操作中执行此操作。例如,在mongo上创建一个脚本并每小时运行一次。