Как можно решить последовательные проблемы на карте, чтобы уменьшить архитектуру? - PullRequest
0 голосов
/ 23 ноября 2011

Для любого ключа, используемого в операции уменьшения карты, элементы с ключом can могут следовать некоторому естественному порядку.

Предположим, мы хотим найти элементы e0 и e1 такие, что:

  1. каждый принадлежит одному и тому же ключу,
  2. они следуют некоторому порядку e0 <<code>e1
  3. нет элемента en, где e0 <<code>en <<code>e1 относительно нашего заказа.
  4. некоторая связь между e0 и e1 верно.

(Как) это можно эффективно сделать с помощью карты уменьшить?

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

Проблема с преобразованием карты заключается в том, что в вызове сокращения, который сокращает e0 и e1, нет ни одного элемента длязнать, существует ли en, что разрушает ваше предположение, что e0 и e1 являются последовательными.

Есть ли умные способы обойти это?Или каркас mapreduce, который может гарантировать, что набор элементов в вызове Reduce является последовательным?Это можно сделать в mongodb?

Ответы [ 3 ]

2 голосов
/ 23 ноября 2011

MapReduce - парадигма параллельного программирования. Закон Амдала ограничивает ускорение, достигаемое благодаря распараллеливанию, до 1 / (S + P / N), где S и P - это доли последовательных / параллельных частей кода, а N - количество процессоров. Если S = ​​1, то P = 0, а ускорение равно 1, т. Е. Нет никакого преимущества (с точки зрения времени вычислений) в использовании любого числа N процессоров. Таким образом, если у вас есть «последовательная» (то есть 100% непараллельная, как вычисление неассоциативной операции сокращения) работа, MapReduce никогда не поможет, никогда. Примечание: возможно, ваша проблема более параллельна, чем вы думаете.

1 голос
/ 23 ноября 2011

Вы можете передать опцию сортировки на карту-уменьшить. Это должно получить вам то, что вы хотите: http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-Overview

Тем не менее, трудно ответить на ваш вопрос без более конкретного примера.

0 голосов
/ 24 ноября 2011

Практическим примером вашего случая является анализ потока кликов как части веб-аналитики.

В этом практическом примере мы обнаружили, что мы можем решить эту проблему в Hadoop двумя способами:

  1. Просто извлеките все события из памяти в редуктор, отсортируйте их в памяти и выполните работу.
  2. Используйте функцию hadoop, называемую «вторичная сортировка», и пусть записи поступят в редуктор в выбранном вами порядке сортировки.

Хотя мой ответ основан на моем опыте работы с hadoop, я думаю, что этот ход мыслей может помешать вам в контексте mongodb.

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