MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Map-redukcja wydajności w MongoDb 2.2, 2.4 i 2.6

Oto aktualny stan funkcji Map/Reduce w MongoDB

1) Większość ograniczeń wydajności Map/Reduce nadal występuje w MongoDB w wersji 2.2. Silnik Map/Reduce nadal wymaga, aby każdy rekord został przekonwertowany z BSON na JSON, rzeczywiste obliczenia są wykonywane przy użyciu wbudowanego silnika JavaScript (który jest powolny) i nadal istnieje jedna globalna blokada JavaScript, która pozwala tylko na jeden wątek JavaScript do uruchomienia w jednym czasie.

Wprowadzono kilka przyrostowych ulepszeń Map/Reduce dla klastrów podzielonych na fragmenty. Przede wszystkim ostateczna operacja Reduce jest teraz rozłożona na wiele fragmentów, a dane wyjściowe są również fragmentowane równolegle.

Nie polecałbym Map/Reduce do agregacji w czasie rzeczywistym w MongoDB w wersji 2.2

2) Począwszy od MongoDB 2.2, istnieje teraz nowy framework agregacji. Jest to nowa implementacja operacji agregacji, napisana w C++ i ściśle zintegrowana ze strukturą MongoDB.

Większość zadań Map/Reduce można przepisać, aby korzystać z agregacji Framework. Zwykle działają szybciej (20-krotna poprawa szybkości w porównaniu z mapowaniem/zmniejszaniem jest powszechna w wersji 2.2), w pełni wykorzystują istniejący silnik zapytań i można równolegle uruchamiać wiele poleceń agregacji.

Jeśli masz wymagania dotyczące agregacji w czasie rzeczywistym, najpierw należy zacząć od agregacji Framework. Aby uzyskać więcej informacji na temat struktury agregacji, spójrz na te linki:

  • http://www.10gen.com/presentations/mongonyc-2012/new-aggregation-framework
  • http://docs.mongodb.org/manual/reference/aggregation/

3) W MongoDB w wersji 2.4 wprowadzono znaczące ulepszenia funkcji Map/Reduce. Silnik JavaScript SpiderMonkey został zastąpiony przez silnik JavaScript V8 i nie ma już globalnej blokady JavaScript, co oznacza, że ​​wiele wątków Map/Reduce może działać jednocześnie.

Silnik Map/Reduce jest nadal znacznie wolniejszy niż framework agregacji z dwóch głównych powodów:

  • Silnik JavaScript jest interpretowany, podczas gdy Aggregation Frameworkruns skompilował kod C++

  • Silnik JavaScript nadal wymaga, aby każdy badany dokument został przekonwertowany z BSON na JSON; jeśli zapisujesz dane wyjściowe w kolekcji, zestaw wyników musi zostać przekonwertowany z JSON z powrotem na BSON

Nie ma znaczących zmian w Map/Reduce między 2.4 a 2.6.

Nadal nie polecam używania Map/Reduce do agregacji w czasie rzeczywistym w MongoDB w wersji 2.4 lub 2.6.

4) Jeśli naprawdę potrzebujesz Map/Reduce, możesz również spojrzeć na adapter Hadoop. Więcej informacji znajdziesz tutaj:

  • http://www.10gen.com/presentations/webinar/mongodb-hadoop-taming-elephant-room
  • http://api.mongodb.org/hadoop/MongoDB%2BHadoop+Connector.html
  • http://www.mongodb.org/display/DOCS/Hadoop+Szybki+Start



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB — Sortuj wyniki zapytania

  2. wielokrotny operator aktualizacji mongo w jednym oświadczeniu?

  3. Jak tworzyć, wyświetlać i upuszczać kolekcje w MongoDB

  4. Zwróć tylko określone pola dla zapytania w Spring Data MongoDB

  5. Najszybsza baza danych MongoDB na platformie Azure!