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

Agregacja MongoDB wydaje się bardzo powolna

Jak już wspomniał @Blakes Seven, $group nie może używać indeksów. Zobacz ten temat .

W ten sposób Twoje zapytanie jest już optymalne. Możliwym sposobem optymalizacji tego przypadku użycia jest wstępne obliczenie i utrwalenie danych w kolekcji bocznej.

Możesz wypróbować tę strukturę danych:

{
  "_id" : ObjectId("560a5139b56a71ea60890201"),
  "ccy" : "USDNOK",
  "date_time_first" : ISODate("2007-01-01T00:00:07.904Z"),
  "date_time_last" : ISODate("2007-09-09T00:00:07.904Z")
}

Zapytanie o to można wykonać w milisekundach zamiast w ciągu ponad 500 sekund i możesz skorzystać z indeksów.

Oczywiście za każdym razem, gdy dodajesz, aktualizujesz lub usuwasz dokument z głównej kolekcji, musisz zaktualizować kolekcję boczną.

W zależności od tego, jak bardzo potrzebujesz „świeżych” danych, możesz również pominąć ten „proces aktualizacji na żywo” i całkowicie zregenerować kolekcję poboczną tylko raz dziennie za pomocą partii i pamiętać, że Twoje dane mogą nie być „ świeże".

Kolejny problem, który możesz naprawić:Twój serwer zdecydowanie potrzebuje więcej pamięci RAM i procesora. Twój zestaw roboczy prawdopodobnie nie mieści się w pamięci RAM, szczególnie w przypadku tego rodzaju agregacji.

Ponadto prawdopodobnie możesz dobrze wykorzystać dysk SSD, a ja SILNIE polecam użycie 3 węzłów Replicaset zamiast pojedynczej instancji do produkcji.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. pymongo - jak dopasować przy wyszukiwaniu?

  2. Do jakiego poziomu MongoDB blokuje zapisy? (lub:co to znaczy za połączenie

  3. Jak usunąć element z podwójnie zagnieżdżonej tablicy w dokumencie MongoDB.

  4. MongoDB $maks.

  5. Tworzenie dynamicznego schematu za pomocą mangusty