Разработка схемы MongoDB - ссылка против встраивания - PullRequest
1 голос
/ 26 июля 2011

Я пишу симуляцию, в которой требуется база данных для хранения результатов.Симуляция записывает огромное количество данных.По очевидным причинам производительности я решил попробовать базу данных NoSQL, в частности MongoDB.Тем не менее, я немного озадачен своей моделью данных.

В реляционном мире схема будет выглядеть так:

Relational data model

  1. Имитация удерживаетсяконфигурация моделирования, состояние и т. д.
  2. Сценарий описывает конкретный случай моделирования.
  3. Группы реализации TestResults.

Моделирование работает следующим образом.Сначала мы создаем конфигурацию (сопоставляемую с таблицей моделирования) и указываем сценарии и количество реализаций для расчета.Затем мы начинаем симуляцию.Симуляция создает реализации в сценарии (параллельно, так много реализаций и рассчитываются одновременно, и вставляются в сценарий, над которым в данный момент работает симуляция).

Однако в NoSQL, особенно в MongoDB, отношения плохие и медленные, поэтому я должен максимально использовать встроенные документы.Итак, я придумал следующее:

Embedded data model

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

Однако по соображениям производительности я хочу вставить реализацию в сценарий, как только он будет вычислен.Что потребует обновления сценария каждый раз, когда реализация завершается.Это плохая идея ?В ссылке MongoDB говорится, что при добавлении встроенного документа в родительский документ родительский документ обновляется, но в любом случае происходит потеря производительности.

Было бы быстрее не встраивать реализацию в сценарий, а ссылаться на нее?Какая производительность будет потеряна при чтении и агрегировании данных позже?Любые другие подводные камни, которые я должен знать?

Спасибо.

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Зависит от того, как вы будете использовать данные - встраивание может включать обновление нескольких документов, поэтому запись выполняется медленно, но чтение всегда только один документ, поэтому будет быстрым. Ссылка - наоборот: запись в один документ (быстрая), но чтение нескольких документов (медленная).

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

0 голосов
/ 21 июля 2013

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

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