Блокирует ли MongoDB MapReduce базу данных

#mongodb #mapreduce

#mongodb #mapreduce

Вопрос:

Блокирует ли базу данных задание MongoDB MapReduce? Я разрабатываю многопользовательское веб-приложение MongoDB и беспокоюсь о многопользовательских конфликтах и производительности. У кого-нибудь есть какие-нибудь мудрые слова для меня?

Комментарии:

1. Мудрые слова, обратите внимание на мой комментарий к принятому ответу о параллелизме.

Ответ №1:

Простой ответ? Иногда…

Это во многом зависит от того, как вы используете map / reduce … но, по моему опыту, это никогда не было проблемой.

Информации об этом не так много, но в документах четко указано, что это иногда блокирует, но «Допускает существенную параллельную работу».

В mongodb-user group есть пара вопросов, задающих по этому поводу … лучший ответ, который я видел официально, заключается в следующем … «в 1.4 это дает результат, но не такой приятный, как должно быть, в 1.5 он намного дружелюбнее к другим запросам».

Это не означает, что он вообще не блокируется, но по сравнению с db.eval() который блокирует весь процесс mongod … это ваш лучший выбор.

Тем не менее, в версии 1.7.2 и выше теперь есть опция nolock для db.eval() …

Комментарии:

1. Однако имейте в виду, что наиболее важная проблема замалчивается: MapReduce блокирует весь контекст Javscript, которого на mongod существует только один. Следовательно, вы не можете запускать несколько одновременных заданий MapReduce на одном сервере MongoDB; будьте осторожны, используя его в качестве механизма запросов.

Ответ №2:

Нет, mapreduce не блокирует базу данных. Смотрите Примечание здесь, сразу после «Использование db.eval()» (в нем объясняется, почему mapreduce может быть более подходящим для использования, чем eval, потому что mapreduce не блокирует).

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

Ответ №3:

В версии 2.1.0 добавлен «неатомный» флаг для параметра вывода.

Смотрите: https://jira.mongodb.org/browse/SERVER-2581