Есть ли встроенная карта / уменьшить на блок Монго? - PullRequest
3 голосов
/ 22 марта 2012

Я знаю, что, поскольку map / Reduce пишет в коллекцию, ему нужно захватить глобальную блокировку записи, но если я установил вывод в inline, разве это не записывает в память?Кажется, он все еще захватывает замок.Возможно ли это нормально для Mongo 2.0?

1 Ответ

4 голосов
/ 22 марта 2012

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

С точки зрения блокировки задание Map / Reduce можно рассматривать как множество мелких операций (включая запись).

Во-первых, существует блокировка javascript, так что только один поток может выполнять код JS в один момент времени, то есть однопоточный, по крайней мере, на данный момент.Но большинство JS-шагов MR (например, одиночная карта ()) очень короткие и, следовательно, блокировка получается очень часто.

Есть также несколько операций, не связанных с JavaScript, которые MapReduce выполняет, которые принимают блокировки:

  • Считывает из коллекции (блокировка чтения дает каждые 100 документов)
  • вставляет документы во временную коллекцию (блокировка записи для одной записи)
  • Создает окончательную коллекцию или объединяет или заменяет существующую коллекцию (блокировка записи)

Ваш встроенный режим удаляетвторые два - в виде карты в памяти, поэтому вы не должны видеть блокировки записи, по крайней мере, для этой работы.Может быть, блокировки связаны с операциями или чтениями JS, а не с записью?

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