我正在尝试构建聊天应用程序。.我不确定如何构建我的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 ...我认为这将是非常重的性能... 要创建一条新消息,我将必须首先将该消息插入到消息集合中,然后将新添加的消息插入到对话集合属性消息字段中,删除操作也是如此..所以查询很多.. ::
如果有人可以帮助我选择一个方案..或创建一个更好的方案,这将真的很有帮助。
提前谢谢:)