MongoDb - использование многопроцессорного сервера для приложения с большой нагрузкой
В настоящее время я оцениваю MongoDb для нашего тяжелого приложения для записи...
В настоящее время MongoDb использует один поток для операции записи, а также использует глобальную блокировку всякий раз, когда делает запись... Возможно ли использовать несколько процессоров на многопроцессорном сервере для повышения производительности записи? Каков ваш обход для глобальной блокировки записи?
Ответы
Ответ 1
Итак, сейчас простое решение - это осколочно.
Да, обычная окантовка выполняется на серверах. Тем не менее, его можно полностью очертить на одной коробке. Вы просто запускаете осколки на разных портах и предоставляете им разные папки. Вот примерная конфигурация из 2 осколков на одной коробке.
Команда MongoDB признает, что это своего рода sub-par, и я знаю, что разговариваю с ними, что они ищут лучшие способы сделать это.
Очевидно, как только вы получите несколько осколков на одном поле и увеличите свои потоки записи, вам придется быть осторожным с диском IO. По моему опыту, я смог насытить диски одним потоком записи. Если ваши вставки/обновления относительно просты, вы можете обнаружить, что дополнительные потоки записи ничего не делают. (Map-Reduces - исключение здесь, осколок определенно помогает там)
Ответ 2
Нет, по-прежнему рекомендуется использовать осколки для использования нескольких ядер процессора.
Как указано в FAQ
Sharding улучшает concurrency путем распределения коллекций по нескольким экземплярам mongod, позволяя серверам осколков (т.е. mongos process) выполнять любое количество операций одновременно с различными последующими экземплярами mongod.
Каждый экземпляр mongod не зависит от других в кластере осколков и использует блокировку чтения-записи MongoDB). Операции на одном экземпляре mongod не блокируют операции над любыми другими.
Остановка на одном ящике имеет свои проблемы, поскольку один пользователь, указанный в списке рассылки mongodb-user
После некоторых значительных экспериментов я обнаружил одного демона MongoDB shard. НЕ МОЖЕТ использовать более одного процессора. На 24-процессорном ящике производительность масштабируется до тех пор, пока мы не нажмем около 8 осколков, а затем еще один предел.