它将成为基于Web的Asychronus,多用户聊天。 我不确定是否将所有内容都嵌入到一个表中。通道文档和嵌入式消息作为SubDoc。 或规范化,两个不同的表,通道和消息,如关系数据库。
Channel: [
{
_id: ObjectId(…),
title: ''
descr: ''
owner: ''
mods : []
}
]
Message: [
{
_id: ObjectId(…)
msgid:''
from : 'UserID'
msg : ''
Channel : "Channel'sObjectID"
}
与
Channel: [
{
_id: ObjectId(…),
title: ''
descr: ''
owner: ''
mods : ['UserID','UserID',]
Message: [
{
msgid:''
from : 'UserID'
msg : ''
}
}
]
消息是聊天消息,需要写很多(由于多用户需求而插入的数量很多)。所以,如果我想写,我需要查询频道的消息并写在那里。它会达到更高的性能吗?
答案 0 :(得分:1)
随着时间的推移,当每个频道收到越来越多的邮件时,您应该将各个邮件作为单独的文档放入另一个集合中。
原因是MongoDB不喜欢随时间增长的文档。出于性能原因,MongoDB将每个文档保存在物理文件的连续部分中。当文档增长到超过该部分时,需要将其移动到文件中的另一个位置。这种不断的重新分配可以是一个真正的性能钩子。非常大的对象也不利于缓存。为了进一步阻止不断增长的对象,MongoDB对每个文档施加了16MB的人为大小限制。每分钟100字节的平均聊天活动的聊天频道将在大约3个月内超过此限制。