Пользоваться одной базой данных из нескольких mongod-процессов
Здравствуйте.
Я не очень силен в монго, и у меня возникла проблема с блокировками при записи-чтении, из-за чего работа с базой данных стала чрезвычайно медленной и невыносимой.
Погуглив и покурив по-быстрому документацию к MongoDB по части Concurrence, я приблизительно понял, что можно каким-то обазом запустить несколько инстансов mongod, и в одном инстансе например производить операции записи, в другом — операции чтения.
Возможно ли это сделать без создания Replica Set?
Я представляю себе это примерно так:
mongod --fork --port 27018
mongod --fork --port 27019
mongod --fork --port 27020
Но инстансы запускаются только с указанием отдельного dbpath, соответственно целевая база данных в других инстансах пустая.
Можно ли как-то использовать одну и ту же базу данных из нескольких инстансов mongod без ее постоянного копирования?
Заранее спасибо.
не получится, ведь тот же самый ресур будет использоваться (ну то есть так нельзя). Я значительно улучшил ситуацию, разбросав коллекции по разным базам данных (лочится база, а не сервер). в приложении указываю не коллекцию а базу.коллекцию каждый раз. Но если у вас идёт нагрузка на одну коллекцию то это не поможет
Спасибо большое за ответ.
Проблема в том что нагрузка как раз и идет на несколько основных коллекций, причем они не маленькие (в самой большое коллекции свыше 4 млн. документов). Индексы стоят на всех нужных полях.
Если вы говорите что ваш вариант не поможет в том случае, если нагрузка на одну коллекцию, можете ли подсказать, какие варианты существуют в таком случае? Заранее спасибо.
поможет репликация (replica set). теоретически можно на одной машине несолько mongod процессов запустить но не знаю что получится в боевых условиях. я менял структуру, разносил данные по разным коллекциям\базам, менял логику приложения (делал буфер). Еще типы подбирал, например MongoId не всегда самый быстрые на выборки, нужно учитывать размеры индексов. Еще монга сильно не любит на диск ходить — индексы должны помещаться в памяти, а лучше и данные тоже.
Имейте ввиду, что «из коробки» не обязательно всё заработает как ожидается (не знаю как там в последней версси монго) нужно правильно настроить Read Preference чтобы читать из secondary а писать в primary. И, возможно, без шардинга тоже не обойтись, хотя 4 млн. в коллекции это не так уж и много.