Выполняет ли MongoDB MapReduce задание блокировку базы данных? Я разрабатываю многопользовательское веб-приложение MongoDB и беспокоюсь о многопользовательских конфликтах и производительности. Кто-нибудь имеет какие-либо слова мудрости для меня?
МонгодBB MapReduce блокирует базу данных
Ответ 1
Простой ответ? Иногда...
Это зависит от того, как вы используете карту/сокращение... но по моему опыту это никогда не было проблемой.
Об этом мало информации, но это четко указано в docs, который иногда блокируется, но он . Позволяет существенную параллельную работу. "
Есть несколько вопросов в группе пользователей mongodb с просьбой об этом... лучший ответ, который я видел в оффлайне - это то, что... "в 1.4 это дает, но не так хорошо, как должно быть, в 1.5 его гораздо более дружелюбное к другим запросам".
Это не значит, что он вообще не блокируется, а по сравнению с db.eval(), который блокирует процесс весь mongod... это ваш лучший ставка.
Тем не менее, в 1.7.2 и выше теперь существует опция nolock для db.eval()...
Ответ 2
Нет, mapreduce не блокирует базу данных. См. примечание здесь, сразу после "Использование db.eval()" (это объясняет, почему mapreduce может быть более подходящим для использования, чем eval, потому что mapreduce не блокируется).
Если вы собираетесь запускать много заданий mapreduce, вы должны использовать sharding, потому что таким образом задание может выполняться параллельно на всех осколках. К сожалению, задания mapreduce не могут выполняться в секундах в наборе реплик, так как результаты должны быть написаны, а реплики доступны только для чтения.
Ответ 3
В версии 2.1.0 добавлен флаг "nonAtomic" для вывода.