MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Сравнение на агрегиране на MongoDB:group(), $group и MapReduce

Донякъде е объркващо, тъй като имената са подобни, но group() командата е различна функция и реализация от $group оператор на тръбопровода в Aggregation Framework.

Командата group(), Aggregation Framework и MapReduce са заедно функции за агрегиране на MongoDB. Има известно припокриване на функциите, но ще се опитам да обясня разликите и ограниченията на всяка от MongoDB 2.2.0.

Забележка:вградени набори от резултати споменатите по-долу се отнасят до заявки, които се обработват в паметта с резултати, върнати в края на извикването на функцията. Алтернативните опции за изход (понастоящем налични само с MapReduce) могат да включват запазване на резултати в нова или съществуваща колекция.

group() Команда

  • Прост синтаксис и функционалност за групиране .. аналогично на GROUP BY в SQL.

  • Връща вграден набор от резултати (като масив от групирани елементи).

  • Реализиран с помощта на JavaScript двигателя; персонализиран reduce() функциите могат да бъдат написани в JavaScript.

  • Текущи ограничения

    • Няма да се групира в резултатен набор с повече от 20 000 ключа.

    • Резултатите трябва да отговарят на ограниченията на BSON документ (понастоящем 16MB).

    • Приема заключване за четене и не позволява на други нишки да изпълняват JavaScript, докато работи.

    • Не работи с разчленени колекции.

  • Вижте също:примери за команди group() .

MapReduce

  • Реализира модела MapReduce за обработка на големи набори от данни.

  • Може да избира от една от няколкото изходни опции (вграден, нова колекция, сливане, замяна, намаляване)

  • Функциите MapReduce са написани на JavaScript.

  • Поддържа неразделени и разчленени входни колекции.

  • Може да се използва за инкрементално агрегиране върху големи колекции.

  • MongoDB 2.2 внедрява много по-добра поддръжка за намаляване на изхода на разчленена карта.

  • Текущи ограничения

    • Едно излъчване може да побере само половината от максималния размер на документа BSON на MongoDB (16MB).

    • Има заключване на JavaScript, така че сървърът на mongod може да изпълнява само една функция на JavaScript в даден момент.. обаче повечето стъпки на MapReduce са много кратки, така че заключванията могат да се предават често.

    • Функциите MapReduce могат да бъдат трудни за отстраняване на грешки. Можете да използвате print() и printjson() за да включите диагностичен изход в mongod дневник.

    • MapReduce обикновено не е интуитивен за програмисти, които се опитват да преведат опит за агрегиране на релационни заявки.

  • Вижте също:Примери за карти/намаляване .

Рамка за агрегиране

  • Нова функция в производствената версия на MongoDB 2.2.0 (август 2012 г.).

  • Проектиран със специфични цели за подобряване на производителността и използваемостта.

  • Връща вграден набор от резултати.

  • Поддържа неразделени и разчленени входни колекции.

  • Използва подход на „тръбопровод“, при който обектите се трансформират, докато преминават през серия от тръбопроводни оператори, като съпоставяне, проектиране, сортиране и групиране.

  • Операторите на тръбопроводи не трябва да създават един изходен документ за всеки входен документ:операторите могат също да генерират нови документи или да филтрират документи.

  • С помощта на прогнози можете да добавяте изчислени полета, да създавате нови виртуални подобекти и да извличате подполета в най-високото ниво на резултатите.

  • Операторите на тръбопровода могат да се повтарят според нуждите (например множество $project или $group стъпки.

  • Текущи ограничения

    • Резултатите се връщат на линия, така че са ограничени до максималния размер на документа, поддържан от сървъра (16MB)

    • Не поддържа толкова много опции за изход като MapReduce

    • Ограничено до оператори и изрази, поддържани от Aggregation Framework (т.е. не могат да пишат персонализирани функции)

    • Най-новата сървърна функция за агрегиране, така че има повече място за развитие по отношение на документация, набор от функции и използване.

  • Вижте също:Примери за Aggregation Framework .

Може ли някой да представи илюстрация или да ме насочи към връзка, където тези три понятия са обяснени заедно, като се вземат едни и същи примерни данни, за да мога лесно да ги сравня?

Обикновено няма да намерите примери, където би било полезно да сравните и трите подхода, но ето предишни въпроси на StackOverflow, които показват вариации:

  • group() срещу Aggregation Framework
  • MapReduce срещу Aggregation Framework



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Изберете дължина на низа в mongodb

  2. MongoDb Aggregation:Как мога да групирам масив-1 въз основа на друг масив-2, когато са дадени масив-1 и масив-2?

  3. Избягвайте предупреждението за оттегляне на текущия анализатор на URL низове, като зададете useNewUrlParser на true

  4. Как да разрешите ClassNotFoundException:com.mongodb.connection.BufferProvider?

  5. NodeJS + MongoDB:Получаване на данни от колекция с findOne ()