Временная коллекция в MongoDB

Я не могу понять этот абзац из документации mongodb MapReduce (http://docs.mongodb.org/manual/applications/map-reduce/) — для чего подходит временная коллекция (оптимизация?) (экономическое обоснование, преимущества и т. д.)?

Временная коллекция

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


person BreakPhreak    schedule 31.03.2013    source источник


Ответы (1)


Допустим, у вас есть набор документов в форме {a:1}, и периодически вам нужно среднее значение a. Допустим также, что вы хотите запустить задание по сокращению карты, которое увеличивает поле «а» на единицу для каждого документа. Однако возможно, что во время выполнения этого сокращения карты выполнялось задание, которое также получает среднее значение a. В этом случае, если у вас не было временной коллекции, среднее значение может быть сброшено из-за того, что работа по уменьшению карты еще не завершена, оставляя коллекцию в промежуточном состоянии.

Чтобы избежать этой ситуации, задание уменьшения карты может работать во временной коллекции, пока оно не завершится. Как только это будет сделано, он переименует временную коллекцию в целевое имя, эффективно заменяя ее новой. Таким образом, когда вы берете среднее значение «а», вы получаете значение, на которое частично не влияет задание уменьшения карты.

Дайте мне знать, если вы хотите, чтобы я немного разъяснил это.

person ACE    schedule 01.04.2013
comment
на самом деле, пытался перечитать его несколько раз и как-то не мог понять: почему у нас должны быть работа и уменьшение карты параллельно? почему среднее будет брошено и как это связано с временной коллекцией, которую у меня НЕ было бы в данный момент? что там происходит, если да и нет, если нет? - person BreakPhreak; 03.04.2013
comment
Смысл использования временных коллекций в том, что вы можете запускать несколько заданий одновременно. Если map-reduce не удалось запустить во временной коллекции, 2 задания могут мешать друг другу, поскольку они выполняются одновременно. Среднее значение будет изменено, потому что, когда один процесс суммирует значения, другой процесс изменяет значения, поэтому порядок, в котором они касаются значений, влияет на окончательное среднее значение. Обратите внимание, что я понимаю ваш последний вопрос - person ACE; 11.04.2013