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

Przyspiesz agregację MongoDB

Obecnie istnieją pewne ograniczenia dotyczące tego, co może zrobić struktura agregacji, aby poprawić wydajność zapytania, ale możesz pomóc w następujący sposób:

db.my_collection.aggregate([
    { "$sort" : { "LOG_TYPE" : 1 } },
    { "$group" :{ 
        "_id": "$LOG_TYPE",
        "COUNT": { "$sum":1 }
    }}
])

Dodając sortowanie na LOG_TYPE "zmusisz" optymalizator do użycia indeksu na LOG_TYPE w celu uporządkowania dokumentów. Poprawi to wydajność na kilka sposobów, ale różnie w zależności od używanej wersji.

W przypadku danych rzeczywistych, jeśli posortujesz dane przychodzące do etapu $group, poprawi to wydajność akumulacji sum. Możesz zobaczyć różne plany zapytań, w których z $sort użyje indeksu klucza fragmentu. Poprawa rzeczywistej wydajności, jaką daje to, będzie zależeć od liczby wartości w każdym „zasobniku” - ogólnie LOG_TYPE mający tylko siedem odrębnych wartości czyni go wyjątkowo słabym kluczem fragmentu, ale oznacza to, że z dużym prawdopodobieństwem następujący kod będzie dużo szybciej niż nawet zoptymalizowana agregacja:

db.my_collection.distinct("LOG_TYPE").forEach(function(lt) {
   print(db.my_collection.count({"LOG_TYPE":lt});
});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Stemming nie działa poprawnie dla indeksu tekstowego MongoDB

  2. ustawianie wartości pola skrótu mongoid

  3. Aktualizacja MongoDB()

  4. Mongo $in ze złożonym indeksem

  5. Mongorestore przez stdin do db o innej nazwie