2013-12-04 4 views
1

Каков наилучший дизайн документа для хранения чата с Mongo?Монго дизайн для чата приложения

  • документ за номер + массив сообщений в каждой комнате
  • документ за номер + документ в сообщении с _id номер
  • что-то другое

Первый вариант должен обрабатывать некоторые ограничения (возможно, переопределять некоторые старые сообщения), потому что документ Mongo ограничен 16Mo (и каков может быть предел x сообщений? Я предполагаю, что x около ~ 300.000, я закрываю?).

Кроме того, кажется, что встроенные массивы, растущие слишком часто, могут turn a fast update-in-place to a slow copy operation. Я не совсем понимаю это.

Второй вариант будет длиться во времени, но сложнее управлять (многие запросы, ссылающиеся на _id и т. Д.).

+0

Почему приложение чата должно сохранять сообщения в базе данных? Обычное определение «чата» - это мгновенное общение, поэтому не должно быть постоянства сообщений. (Важно, чтобы вы ответили на этот вопрос, потому что он расскажет нам о вашем использовании) – Philipp

+0

Пользователи должны иметь возможность просматривать историю чата. Как и в Google Hangouts, сообщения сохраняются. Что может быть лучшим способом сделать это? –

+1

Эффективный дизайн схемы очень зависит от вашего приложения. Для чат-приложения я ожидаю, что вы * можете * хотеть иметь какой-то подход с ведомым кодом (т. Е. Документы с целым рядом сообщений, а не всю историю). Несколько полезных отправных точек: [Проектирование схем MongoDB с встроенными, не встроенными и ведровыми структурами] (https://www.openshift.com/blogs/designing-mongodb-schemas-with-embedded-non-embedded-and-bucket -структуры) и [Схема дизайна для социальных почтовых ящиков в MongoDB] (http://blog.mongodb.org/post/65612078649/schema-design-for-social-inboxes-in-mongodb). – Stennie

ответ

2

MongoDB не любит документы, которые растут.

Причина заключается в том, что MongoDB всегда хранит документы в смежном разделе в файлах базы данных. Это делает чтение намного проще и быстрее, потому что не нужно искать жесткий диск для чтения одного документа.

Это означает, что когда документ становится настолько большим, что он будет перекрывать пространство следующего документа в файле, этот документ необходимо удалить, и для его хранения необходимо выделить новое пространство на жестком диске. Это дорогостоящая операция. Когда ваши документы растут все время, это произойдет очень часто, и производительность записи будет страдать.

Теперь на ваш вопрос: «Что такое лучший дизайн документа?»

Никогда не принимал решение проблемы. Существует только решение, которое лучше всего подходит для вас. какое решение зависит от ваших требований.

  • Что для вас важнее: прочитайте производительность или производительность записи?
  • Сколько сообщений вы ожидали хранить в базе данных?
  • Как вы собираетесь запрашивать чат-сообщения? По комнате? По пользователю? По временным рамкам? По содержанию? Какой из наиболее часто используемых вариантов использования?
+0

(1.) производительность чтения и записи кажется важной, но запись может быть отложена или сгруппирована (в час или день, в отношении их свежести), пока пользовательский чат отлично реагирует (2.) Я ожидаю хранить много сообщений в магазине, но , Я могу выбрать удаление очень старых (3.) сообщения чата будут запрашиваться в комнате в большинстве случаев –

+0

@yvesamsellem Прошу прощения, что я не могу дать вам золотой молоток, который решит все ваши проблемы. Вам не обойтись, чтобы подумать, какая схема лучше всего подходит для вашего приложения. Вы знаете, что делаете, я этого не делаю. – Philipp

Смежные вопросы