Latest web development tutorials
×

MongoDB курс

MongoDB курс NoSQL Краткое введение MongoDB Краткое введение Window устанавливать MongoDB Linux устанавливать MongoDB MongoDB Интерпретация Концепции MongoDB подключение MongoDB Создание базы данных MongoDB Удалить базу данных MongoDB Вставить документ MongoDB Обновление документации MongoDB Удаление документов MongoDB документ Запрос MongoDB Условный оператор MongoDB $type операторы MongoDB Limit & Skip MongoDB последовательность MongoDB индекс MongoDB агрегирование MongoDB копия MongoDB Ломтики MongoDB Резервное копирование и восстановление MongoDB монитор MongoDB Java MongoDB PHP распространение MongoDB PHP MongoDB PHP7

MongoDB Расширенный учебник

MongoDB отношения MongoDB ссылки на базы данных MongoDB Индекс покрытия запроса MongoDB анализ запросов MongoDB атомарные операции MongoDB Расширенный индексации MongoDB ограничения индекса MongoDB ObjectId MongoDB Map Reduce MongoDB Полнотекстовый поиск MongoDB Регулярные выражения MongoDB Инструменты управления MongoDB GridFS MongoDB Фиксированный набор MongoDB Автоматический рост

MongoDB Карта Уменьшить

Map-Reduce является вычислительная модель, просто означает, что основная часть работы (данные) разложения (MAP) для выполнения, а затем объединить результаты в конечный результат (УМЕНЬШИТЬ).

MongoDB обеспечивает Map-Reduce является очень гибким для анализа данных крупномасштабных также весьма практично.


команда MapReduce

Ниже приведен основной синтаксис MapReduce:

>db.collection.mapReduce(
   function() {emit(key,value);},  //map 函数
   function(key,values) {return reduceFunction},   //reduce 函数
   {
      out: collection,
      query: document,
      sort: document,
      limit: number
   }
)

Использование функций MapReduce для достижения двух функций Карта и уменьшить функции, вызов функции Map испускают (ключ, значение), пройти сбор всех записей, а значение ключа передается функции Reduce для обработки.

Функция Map должна вызвать испускают (ключ, значение) Возвращает пары.

Параметр Описание:

  • Функция отображения (генерировать последовательности клавиш как уменьшить параметрыфункции): отображение.
  • сократить статистические функции, задача состоит в том, чтобы уменьшить функциональную клавишу-значения в ключ-значение, то есть массив значений в единое значение стоимости.,
  • из статистических результатов сохраненного набора (не определяет использование временного сбора автоматически удаляются после того, как клиент отключен).
  • условие фильтразапроса, только для выполнения условий документа будет называться функция карты.(Query.limit, сортировки может смешать)
  • сортировать и предел связывания своего рода своего рода параметр (также бывший документ , отправленный на функцию карты для сортировки), вы можете оптимизировать группировку механизма
  • ограничить количество документов , переданных в верхний предел функции карты (если не существует никаких ограничений, в одиночку рода мало пользы)

Использование MapReduce

Рассмотрим следующую структуру документа для хранения данных пользователя статей, документов и сохраняет поле статуса статьи пользователя user_name:

>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "mark",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "mark",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "mark",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "mark",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "mark",
   "status":"disabled"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "w3big",
   "status":"disabled"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "w3big",
   "status":"disabled"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "w3big",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })

Теперь мы будем использовать посты, установленные функции MapReduce, чтобы выбрать опубликованную статью (статус: «активный»), а user_name пакета рассчитывается для каждого пользователя Сообщений:

>db.posts.mapReduce( 
   function() { emit(this.user_name,1); }, 
   function(key, values) {return Array.sum(values)}, 
      {  
         query:{status:"active"},  
         out:"post_total" 
      }
)

Над MapReduce выход:

{
        "result" : "post_total",
        "timeMillis" : 23,
        "counts" : {
                "input" : 5,
                "emit" : 5,
                "reduce" : 1,
                "output" : 2
        },
        "ok" : 1
}

Результаты показали, что в общей сложности четыре соответствуют критериям запроса (статус: "активные") документы генерируются четыре ключа в функции отображения в документе, а затем использовать ту же самую функцию, чтобы уменьшить ключ разделить на две группы.

Конкретные параметры:

  • Результат: хранить результаты название коллекции, это временный набор назад от автоматического подключения MapReduce был удален.
  • timeMillis: выполнение занимает много времени, в миллисекундах
  • вход: состояние номер документа передается функции карты
  • испускают: раз в функции карты испускают называется, то есть общая сумма всех сбора данных
  • Ouput: Результаты Количество документов в коллекции (количество очень полезно для отладки)
  • ОК: успех, успех 1
  • ERR: Если это не удается, то может быть причина потерпеть неудачу, но из опыта, причиной является расплывчатым, не очень полезно

Использование оператора найти для просмотра результатов запроса MapReduce из:

>db.posts.mapReduce( 
   function() { emit(this.user_name,1); }, 
   function(key, values) {return Array.sum(values)}, 
      {  
         query:{status:"active"},  
         out:"post_total" 
      }
).find()

Результаты вышеупомянутого запроса будет показано ниже, есть два пользователя индюки и отметьте две статьи, опубликованные:

{ "_id" : "mark", "value" : 4 }
{ "_id" : "w3big", "value" : 1 }

Аналогичным образом, MapReduce могут быть использованы для создания больших и сложных агрегатные запросы.

Карта функций и уменьшения функции могут быть реализованы с использованием JavaScript, MapReduce использовать очень гибкий и мощный.