MongoDB / NoSQL Производительность и дизайн - PullRequest
2 голосов
/ 13 октября 2011

У меня есть вопрос, который касается вопроса производительности и Mongo Design.В настоящее время проект, над которым я работаю, будет включать уведомления, подобные Facebook, где пользователь будет получать сообщения о событиях, происходящих на сайте.Проблема заключается в выборе того, будут ли уведомления представлять собой либо собственную коллекцию, либо массив, встроенный в пользователя.Требования к уведомлениям включают:

  1. Изменение статуса с прочитанного / непрочитанного и упорядочение по дате (другая сортировка может быть позже).
  2. Уведомления должны быть в режиме реального времени.
  3. Уведомления удаляются каждые 2 недели.

Исправьте мои ошибки, если я ошибаюсь, так я думаю.

Если уведомления встроены в пользовательский документ, онибудет медленнее, дороже и дольше развиваться и труднее поддерживать \, потому что:

  1. Для упорядочения и сортировки их нужно будет уменьшить на карте, чтобы найти только непрочитанные и упорядоченные посвидание.Или это может быть сделано с помощью PHP, но это более длительный процесс.

  2. Обновление / удаление записи уведомления во встроенном массиве занимает больше времени для поиска этого документа и может привести к ошибкам, еслииндекс уведомления изменился (IE: новое уведомление вставлено в документ).

  3. Уведомления будут добавлены в очередь на PHP и / или JavaScript для последующего извлечения.Потребуется больше времени, чтобы выяснить, как изменить очередь (добавить / удалить), поскольку у них не будет идентификаторов.

Если они хранятся в своей собственной коллекции и каждое уведомление имеетего собственный идентификатор.

  1. Уменьшение карты не требуется, и его легче найти и отсортировать.

  2. Возможно, есть проблемы с производительностью, если естьмного уведомлений (это правда или ложь?).

  3. Проще обновлять очереди, потому что присутствуют идентификаторы.

  4. Проще и может большенадежно обновлять и удалять уведомления, поскольку идентификаторы не меняются.

Могу ли я получить некоторые отзывы по этому поводу?Моя логика правильная или неправильная?

1 Ответ

3 голосов
/ 13 октября 2011

Оба подхода работают нормально.Но у меня есть похожая функциональность в моем приложении, угадайте, что, я также выбрал второй подход (Хранение уведомлений в отдельной коллекции).Из-за 2 основных причин

  1. Вы не можете выбрать лучшие n уведомлений, когда они встроены.Mongodb find выбирает весь документ независимо от фильтра.Он вернет весь документ со всеми вашими уведомлениями.

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

Этих двух причин более чем достаточно, чтобы не включать встраиваемые документы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...