Является ли хорошей идеей хранить сообщения чата в коллекции mongodb?
Я разрабатываю приложение для чата с node.js, redis, socket.io и mongodb. MongoDB приходит последним и для сохранения сообщений.
Мой вопрос заключается в том, каков был бы наилучший подход для этого последнего шага?
Я боюсь, что коллекция со всеми сообщениями, как
{
id,
from,
to,
datetime,
message
}
Может стать слишком большим слишком рано, и собирается стать очень медленным для целей чтения, что вы думаете?
Есть ли лучший подход, с которым вы уже работали?
3 ответов:
Я думаю, что структура БД в порядке, как вы упомянули в своем вопросе.
Вы можете назначить некоторую
unique idдля чата между каждой парой и сохранить ее в каждой записи чата. Извлекать на основе этого, когда вы хотите, чтобы показать его.Say
12является уникальным идентификатором для чата между A и B, retrieve должен основываться на12, Когда вы хотите показать чат для A и B.Таким образом, ваша структура БД может быть такой: -
{ id, from, to, datetime, message, uid }Помните, что вы можете оптимизировать свой retrieve, если вы дадите некоторые
limit(скажем, 100 за раз)для извлечения. Если пользователь прокручивает более 100, извлеките еще 100 чатов. Который будет решать много получать.При использовании
limit, извлекать на основеdate createdи использоватьsortс поиском запроса, а также.
В MongoDB вы сохраняете данные в том формате, который захотите прочитать позже.
Если то, что Вы читаете из базы данных, является списком сообщений, отфильтрованных по полю "кому" и с динамическим фильтром datetime, то эта схема идеально подходит.
Не забудьте добавить индекс к полям, которые вы будете запрашивать, тогда будет разумно быстро запрашивать их, даже через миллионы записей.
Если бы вы, например, всегда показывали полную историю целого дня, то вы будет хранить все сообщения в течение одного дня в одном документе. Если оба типа запросов встречаются часто, вы даже будете хранить свои сообщения в обоих форматах.
Если проблема с хранением, вы также можете использовать ограниченную коллекцию, которая автоматически удалит сообщения, например, старше 1 года.
Просто подумайте здесь, являются ли сообщения обычным текстом или вам также разрешено обмениваться изображениями и видео ?
Если это последнее, то хранение всех чатов в течение одного дня в одной коллекции может не сработать.
На самом деле, если у вас есть изображения и видео разрешены, то вы должны принять во внимание. Ограничение документа 16 Мб также.
Comments