Porównanie agregacji MongoDB: group (), $group i MapReduce

Jestem nieco zdezorientowany, kiedy użyć metody group (), aggregate z $group lub mapreduce. Przeczytałem dokumentację na http://www.mongodb.org/display/DOCS/Aggregation dla grupy (), http://docs.mongodb.org/manual/reference/aggregation/group/#_S_group dla $group.. Czy sharding jest jedyną sytuacją, w której group() nie będzie działać? Mam też wrażenie, że $group jest potężniejsza niż group (), ponieważ może być używana w połączeniu z innymi operatorami rurociągów z ramy agregacji.. Jak $group porównuje się z mapreduce? Czytałem gdzieś, że nie generuje żadnej kolekcji tymczasowej, podczas gdy mapreduce robi. Naprawdę?
Czy ktoś może przedstawić ilustrację lub poprowadzić mnie do linku, gdzie te trzy pojęcia są wyjaśnione razem, biorąc te same przykładowe dane, abym mógł je łatwo porównać?

edytuj:
ponadto, byłoby świetnie, gdybyś mógł wskazać coś nowego konkretnie w tych poleceniach, ponieważ pojawiło się nowe wydanie 2.2 Wynocha..

Author: ekad, 2012-09-09

1 answers

Jest to nieco mylące, ponieważ nazwy są podobne, ale group() polecenie {[12] } jest inną funkcją i implementacją niż $group operator rurociągu W ramach agregacji.

Polecenie group (), Framework agregacji i MapReduce są zbiorczo funkcjami agregacji MongoDB. Istnieje pewne nakładanie się funkcji, ale postaram się wyjaśnić różnice i ograniczenia każdego z nich, jak w MongoDB 2.2.0.

Uwaga: inline result sets wymienione poniżej odnoszą się do zapytań, które są przetwarzane w pamięci z wynikami zwracanymi na końcu wywołania funkcji. Alternatywne opcje wyjściowe (obecnie dostępne tylko z MapReduce) mogą obejmować zapisywanie wyników do nowej lub istniejącej kolekcji.

group() Komenda

  • Prosta składnia i funkcjonalność grupowania .. analogicznie do GROUP BY w SQL.

  • Zwraca wynik ustawiony w linii (jako tablica elementów zgrupowanych).

  • Zaimplementowane przy użyciu silnika JavaScript; niestandardowe funkcje reduce() mogą być pisane w JavaScript.

  • Aktualne Ograniczenia

    • Nie będzie grupować w zestaw wyników z więcej niż 20 000 kluczy.

    • Wyniki muszą mieścić się w granicach dokumentu BSON (obecnie 16MB).

    • Pobiera blokadę odczytu i nie pozwala innym wątkom na wykonywanie JavaScript, gdy jest bieganie.

    • Nie działa z sharded collections.

  • : przykłady poleceń group() .

MapReduce

  • Implementuje model MapReduce do przetwarzania dużych zbiorów danych.

  • Można wybrać jedną z kilku opcji wyjścia (inline, new collection, merge, replace, reduce)

  • Funkcje MapReduce są napisane w JavaScript.

  • Obsługuje Kolekcje wejściowe non-sharded i sharded.

  • Może być używany do agregacji przyrostowej nad dużymi zbiorami.

  • MongoDB 2.2 implementuje znacznie lepsze wsparcie dla sharded map reduce output.

  • Aktualne Ograniczenia

    • Pojedynczy emit może pomieścić tylko połowę maksymalnego rozmiaru dokumentu BSON MongoDB (16 MB).

    • Istnieje JavaScript blokada tak, aby serwer mongod mógł wykonać tylko jedną funkcję JavaScript w danym momencie .. jednak większość kroków MapReduce jest bardzo krótka, więc blokady mogą być często poddawane.

    • Funkcje MapReduce mogą być trudne do debugowania. Możesz użyć print() i printjson(), aby włączyć wyjście diagnostyczne do dziennika mongod.

    • MapReduce nie jest na ogół intuicyjne dla programistów próbujących przetłumaczyć relacyjną agregację zapytań doświadczenie.

  • : Mapa / zmniejsz przykłady.

Ramy Agregacji

  • Nowa funkcja w wydaniu produkcyjnym MongoDB 2.2.0 (sierpień, 2012).

  • Zaprojektowany z myślą o konkretnych celach poprawy wydajności i użyteczności.

  • Zwraca wynik ustawiony w wierszu.

  • Obsługuje Kolekcje wejściowe non-sharded i sharded.

  • Używa a podejście "pipeline", w którym obiekty są przekształcane w miarę przechodzenia przez szereg operatorów rurociągów, takich jak dopasowywanie, rzutowanie, sortowanie i grupowanie.

  • Operatorzy rurociągów nie muszą tworzyć jednego dokumentu wyjściowego dla każdego dokumentu wejściowego: operatorzy mogą również generować nowe dokumenty lub filtrować dokumenty.

  • Za pomocą projekcji można dodawać pola obliczeniowe, tworzyć nowe wirtualne obiekty podrzędne i wyodrębniać pola podrzędne na najwyższym poziomie wyniki.

  • Operatory rurociągów mogą być powtarzane w razie potrzeby (na przykład wiele kroków $project lub $group.

  • Aktualne Ograniczenia

    • Wyniki są zwracane w linii, więc są ograniczone do maksymalnego rozmiaru dokumentu obsługiwanego przez serwer (16MB)

    • Nie obsługuje tak wielu opcji wyjściowych jak MapReduce

    • Ograniczone do operatorów i wyrażeń wspieranych przez framework agregacji (tzn. nie można pisać funkcji niestandardowych)

    • Najnowsza funkcja serwera do agregacji, więc ma więcej miejsca do dojrzałości pod względem dokumentacji, zestawu funkcji i użytkowania.

  • : przykłady RAM agregacji.

Czy ktoś może przedstawić ilustrację lub poprowadzić mnie do linku, gdzie te trzy pojęcia są wyjaśnione razem, biorąc te same przykładowe dane, abym mógł je porównać łatwo?

Ogólnie nie znajdziesz przykładów, w których byłoby przydatne porównanie wszystkich trzech podejść, ale oto poprzednie pytania Stoskoverflow, które pokazują różnice:

 75
Author: Stennie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:25