Назад | Перейти на главную страницу

Производительность размера коллекции MongoDB / Больше коллекций по сравнению с большим количеством документов

Есть у кого-нибудь представление о производительности mongodb? Я использую mysql в течение многих лет, и я пытаюсь определить, оптимальнее ли иметь больше коллекций или больше документов (относится к очень большим объемам данных) - в MySQL более оптимально иметь больше строк, чем размещать больше таблиц .

Например, у нас может быть две таблицы (коллекции) отелей с клиентами или одна таблица / коллекция, в которой есть дополнительный столбец, содержащий отель.

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

Примечание: не забывайте, что у mongodb есть ограничение на размер документа, я думаю, что это 16 МБ, но вам нужно проверить документацию

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

На нашем сайте есть несколько разных коллекций, и на одну из них есть ссылка. Это зависит от того, какой драйвер вы используете, разрешит ли он ссылки за вас или нет.

Другой момент, который следует учитывать, - это то, как вы будете обновлять данные.

MongoDB mmap хранит всю коллекцию в памяти и позволяет вашей ОС определять, какие части должны быть выгружены на диск, а какие части данных должны храниться в памяти. Не должно быть большой разницы в производительности между 1 большой таблицей и 2 таблицами среднего размера, если размер всего набора данных одинаков. Здесь следует обратить внимание на индексы: если вы объедините данные в одну коллекцию, и индекс может охватить все это, вы сможете быстрее искать данные.

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

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