Я собираюсь разработать приложение для группового чата на основе mongodb, есть два варианта дизайна схемы, один из которых разработан как один документ для одного сообщения группового чата, а другой - как один документ для всех сообщений группы.
В первом варианте это может быть показано как
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
]
}
Оба дизайна имеют свои плюсы и минусы, недостаток:Второй вариант - он вряд ли может индексировать пользователя и искать сообщения от пользователей, а также слишком большое количество групповых сообщений может привести к созданию более одного документа.
Первый вариант представляется более разумным, поскольку он позволяет искать сообщения по групповому идентификатору или идентификатору пользователя, если мы можем правильно индексировать.
но мне интересно, поскольку в группе сотни тысяч сообщений, то есть в одной группе будут соответствующие сотни тысяч документов, повлияет ли это на производительность базы данных?
есть идеиэти варианты дизайна, является ли первый вариант оптимальным или как его оптимизировать?