【发布时间】:2019-09-22 05:51:42
【问题描述】:
我要设计一个基于mongodb的群聊应用,有两种schema设计选择,一种设计为一个文档用于一条群聊消息,另一种设计为一个文档用于所有群消息。
在第一个选项中,可以显示为
var ChatMessageSchema = new Schema({
fromUserId: ObjectId,
toTroupeId: ObjectId,
text: String,
sent: Date
}
在第二个选项中,可以显示为
var ChatMessageSchema = new Schema({
toTroupeId: ObjectId,
chats:[
fromUserId: ObjectId,
text: String,
sent: Date
]
}
两种设计各有利弊,第二种方案的缺点是它很难对用户进行索引和搜索来自用户的消息,而且太多的组消息可能会迫使创建多个文档。
第一个选项似乎更合理,因为如果我们可以正确索引,它可以允许基于 groupid 或 userid 搜索消息。
但是我想知道由于组中有数十万条消息,意味着一个组中会有相应的数十万个文档,这会影响数据库性能吗?
关于这些设计选择的任何想法,第一个选项是最佳选项,还是如何优化它?
【问题讨论】:
-
您的系统是否支持在多个组中搜索消息?还是只是一个特定的群体?
-
@Skami 我想知道它们之间的区别,到目前为止我认为搜索仅限于一个组
标签: mongodb database-schema mongoose-schema