聊天应用程序的Mongodb模式

时间:2018-10-24 18:10:08

标签: javascript node.js database mongodb mongoose

我正在尝试构建聊天应用程序。.我不确定如何构建我的mongodb模式。

当前我正在使用此架构。 集合名称:对话

{
   conversation: {
     id: 1,
     name: test
   },
   messages: [
     {
       _id: mongoid("123"),
       userID: 1,
       message: "test message"
       date: date..,
       status: 1,
       pins: [2, 3] //message pin by user ids
       mentions: [4, 5],
       replyMsgID: mongoid(456)
     },
     ...
   ],
   users: [
     {
       userID: 1,
       blocked: 1,
       lastActiveTime: dateTime,
     },
     ...
   ]
}
...

我正在考虑这样的另一种方案...

{
   conversation: {
     id: 1,
     name: test
   },
   messages: [
     {
     _id: mongoid("999")
     msgID: mongoID("123")
     },
     {
     _id: mongoid("888")
     msgID: mongoID("456")
     },
     ...
   ],
   users: [
     {
       userID: 1,
       blocked: 1,
       lastActiveTime: dateTime,
     },
     ...
   ]
}

消息收集..

messages: [
 {
   _id: mongoid("123"),
   userID: 1,
   message: "test message"
   date: date..,
   status: 1,
   pins: [2, 3] //message pin by user ids
   mentions: [4, 5],
   replyMsgID: mongoid(456),
   conversationID: 1 
 },
 ...
]

我是mongodb的新手,我很困惑应该将哪种模式用于可扩展的聊天应用程序。

我认为模式1将面临的问题是.. 在某些时候,文档大小可能会超过mongo的16mb限制... 当获取或更新任何内容(例如,如果我仅需要一条消息或仅一个用户)时,mongo将返回包含数千条消息的整个文档

第二个方案的问题... 我将需要使用聚合框架加入两个集合,并且可能需要大量使用$ unwind,$ group ...我认为这将是非常重的性能... 要创建一条新消息,我将必须首先将该消息插入到消息集合中,然后将新添加的消息插入到对话集合属性消息字段中,删除操作也是如此..所以查询很多.. ::

如果有人可以帮助我选择一个方案..或创建一个更好的方案,这将真的很有帮助。

提前谢谢:)

0 个答案:

没有答案