Хранение исторических данных MongoDB - лучшая практика? - PullRequest
7 голосов
/ 25 января 2012

Если у меня есть пользователь, у которого есть идентификатор, и я хочу каждый день сохранять историческую запись (документ) об этом пользователе, что лучше:

  • создать новый документ для каждой записи и найти идентификатор пользователя; или
  • продолжать обновлять и встраивать эти данные в один однопользовательский документ, который со временем растет?

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

Ответы [ 2 ]

4 голосов
/ 25 января 2012

Существует ограничение на размер документа. Это (по состоянию на v1.8) 16 МБ. Так что вы можете просто выйти из комнаты, если вы обновите и вставите. Кроме того, Mongo выделяет пространство для документов на основе среднего размера документа в коллекции. Если вы продолжите корректировать / изменять размер, это может иметь негативные последствия для производительности.

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

3 голосов
/ 25 января 2012

Есть много переменных, которые могут повлиять на такое решение. Один большой документ кажется наиболее очевидным при условии, что он не вырастет до непрактично большого или даже запрещенного размера (учтите, что размер документа может составлять не более 16 МБ).

Использование документа для каждой записи также вполне жизнеспособно, и при условии, что вы создаете соответствующие индексы, не должны вызывать медленные запросы.

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