Вот место , чтобы начать работу с Map Reduce в Монго.В кулинарной книге есть несколько примеров, я бы остановился на этих двух .
. Мне нравится думать о сокращении карты в контексте "заданий хранилища данных" или«накопительные».В основном вы берете подробные данные и «свернете» уменьшенную версию этих данных.
В SQL вы обычно делаете это с sum()
и avg()
и group by
.В MongoDB вы могли бы сделать это с помощью Map Reduce.Основная предпосылка Map Reduce состоит в том, что у вас есть две функции.
Первая функция (map) - это гигантский цикл for
, который работает над вашими данными и «излучает» определенные клавиши и значения .Вторая функция (уменьшение) - это гигантский цикл по всем передаваемым данным.На карте написано «эй, это данные, которые вы хотите обобщить» , а сокращение говорит «эй, этот массив из значений сводится к этому единственному значению»
Вывод карты-редукции может иметь различные формы (обычно плоские файлы).В MongoDB выходные данные на самом деле представляют собой новую коллекцию.
Особенности C #
В MongoDB все сокращения карт выполняются внутри движка javascript.Таким образом, обе функции map & Reduce написаны на JavaScript.Различные драйверы позволят вам собрать javascript и выполнить команду, однако я обычно не делаю это так.
Предпочтительный метод запуска заданий Map Reduce - это скомпилировать JS в файл, а затемmongo map_reduce.js
.Как правило, вы будете делать это на сервере где-нибудь как задание cron или запланированное задание.
Почему?
Ну, сокращение карты - это не "в режиме реального времени", особенно с большимнабор данных.Он действительно предназначен для использования в пакетном режиме.Не поймите меня неправильно, вы можете вызвать его из своего кода, но, как правило, вы не хотите, чтобы пользователи инициировали работу по сокращению карты.Вместо этого вы хотите, чтобы эти задания были запланированы, и вы хотите, чтобы пользователи запрашивали результаты:)