2015-06-01 4 views
1

У меня есть база данных mongo, используемая для представления электронных таблиц с тремя коллекциями, представляющими соответственно значения ячеек (строка, col, значение), форматирование ячейки (строка, col, объект, представляющий формат) и размеры ячеек (будь то размер строки или столбца, его индекс и размер).

В каждом документе во всех коллекциях также есть поле для идентификации таблицы, к которой оно относится (содержащее имя таблицы), и я использую upserts (метод findOneAndReplace mongoose с upsert:true) для всех вставок/обновлений.

Я думал о том, чтобы «вытащить схему изнутри», оставив одну коллекцию, представляющую таблицу, и документы, ранее содержавшиеся в трех коллекциях, в качестве поддокументов внутри нее, поскольку я думал, что это сделает ее более организованной.
Однако, прочитав вопрос о субдокументах, похоже, что в любом случае для каждой вставки/обновления потребуются два запроса (например, see this question). Поэтому мне было интересно, будут ли изменения, которые я имел в виду, приведет к удару по производительности (я думаю, upserts все равно нужно выполнить поиск, а затем либо обновить, либо вставить, так что по-прежнему будут два запроса за кулисами, но будь то какая-то оптимизация, о которой я не знаю), и в попытке упростить схему я бы не только усложнил процедуры вставки/обновления, но и получил более низкие показатели. Благодаря!Производительность mongodb при обновлении/вставке поддокументов

+0

Любой ответ, вероятно, будет в основном основанным на мнениях. В любом случае, одна вещь, которую вы должны задать себе: _how_ вы собираетесь использовать данные: какие запросы вы будете отправлять в БД? Можете ли вы позволить себе хранить всю электронную таблицу в ОЗУ? Есть ли шанс достичь предела в 16 МБ? Есть ли одновременные обновления некоторых ячеек? Будете ли вы иметь «защищенные» ячейки? Ответ на эти вопросы (и многие другие) для приложения _your поможет вам разработать схему _your_. –

+0

Спасибо, вы поднимаете некоторые хорошие моменты. Особенно в отношении типа запросов. Я ожидаю в основном писать запросы, поэтому я, вероятно, буду придерживаться того, что у меня уже есть – Orgrim

ответ

0

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

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

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