Какие операции дешевы / дороги в mongodb? - PullRequest
12 голосов
/ 19 декабря 2011

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

Можете ли вы помочь уточнить?

Спасибо.

Ответы [ 3 ]

6 голосов
/ 19 декабря 2011

Часто утверждается, что mongodb безумно быстро пишет. Хотя они действительно не медленные, это довольно преувеличение. Пропускная способность записи в mongodb ограничена глобальной блокировкой записи. Да, вы меня правильно поняли, в любой момент на сервере может быть только ONE * операция записи.

Также я предлагаю вам воспользоваться mongodb без схемы и хранить ваши данные денормализованными. Часто можно выполнить только один поиск диска, чтобы извлечь все необходимые данные (потому что все они находятся в одном документе). Меньше дисков - быстрее запросов.

Если данные находятся в ОЗУ - поиск диска вообще не требуется, данные подаются прямо из памяти. Итак, убедитесь, что у вас достаточно оперативной памяти.

Map / Reduce , group , $, где запросы медленные.

Запись в один большой документ не так быстро (например, с использованием $push). Документ выйдет за границы диска и должен быть скопирован в другое место, что потребует дополнительных операций с диском.

И я согласен с @AurelienB, некоторые базовые принципы универсальны для всех баз данных.


Обновление

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

4 голосов
/ 19 декабря 2011

Из моей практики следует упомянуть, что mongodb не очень хорошо подходит для отчетов, потому что обычно в отчетах вам нужны данные из разных коллекций (' join '), а mongodb не обеспечивает хороший способ агрегировать данные нескольких коллекций (и не должны предоставлять). Конечно, для некоторых отчетов карта / уменьшение или добавочный карта / уменьшение могут работать хорошо, но это редкие ситуации.

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

1 голос
/ 19 декабря 2011

Это не сильно отличается от всех систем баз данных.

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

Напротив, чтение данных, которые находятся на диске (не в ОЗУ) без индекса, может быть очень медленным, когда у вас есть миллиард документов.

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