MongoDb - использование многопроцессорного сервера для тяжелой записи - PullRequest
19 голосов
/ 10 декабря 2010

В настоящее время я оцениваю MongoDb для нашего тяжелого приложения для записи ...

В настоящее время MongoDb использует однопоточный режим для операции записи, а также использует глобальную блокировку всякий раз, когда выполняет запись ... Возможно ли использовать несколькоCPU на многопроцессорном сервере, чтобы получить лучшую производительность записи?Каковы ваши решения для глобальной блокировки записи?

Ответы [ 2 ]

17 голосов
/ 14 марта 2013

Нет, все еще рекомендуется использовать шардинг для использования нескольких ядер ЦП.Как указано в FAQ

Sharding улучшает параллелизм за счет распределения коллекций по нескольким экземплярам mongod, позволяя серверам шарда (т. Е. процессы mongos ) для выполнения любого количества операций одновременно с различными нисходящими экземплярами mongod .

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

У шардинга на одном ящике есть свои проблемы, поскольку один пользователь указал в списке рассылки mongodb-user

После некоторых значительных экспериментов я обнаружил, что один демон шардов MongoDB НЕ МОЖЕТ использовать более одного ЦП.На корпусе с 24 процессорами производительность увеличивается до тех пор, пока мы не достигнем примерно 8 осколков, а затем наступит еще один предел.

17 голосов
/ 10 декабря 2010

Так что сейчас простое решение - осколок.

Да, обычно разделение выполняется на серверах.Тем не менее, вполне возможно осколок на одной коробке.Вы просто запускаете осколки на разных портах и ​​предоставляете им разные папки. Вот пример конфигурации из 2 осколков на одном боксе.

Команда MongoDB признает, что это своего рода подпаритет, и по разговорам с ними я знаю, что они смотрят лучшеспособы сделать это.

Очевидно, что как только вы получите несколько осколков на одном блоке и увеличите количество потоков записи, вам придется опасаться дискового ввода-вывода.По моему опыту, я смог насытить диски одним потоком записи.Если ваши вставки / обновления относительно просты, вы можете обнаружить, что дополнительные потоки записи ничего не делают.(Сокращения карты - исключение здесь, шардинг определенно помогает там)

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