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

Obsługa zakresu w czasie analizy zbiorczej

Przejdźmy do Twojego pytania jeden po drugim:

Patrzenie na wskaźniki wydajności z pojedynczego wykonania tak naprawdę nie działa. Powinieneś wziąć średnią z kilku egzekucji, zanim wyciągniesz wnioski, ponieważ w grę wchodzi kilka czynników. Mając to na uwadze, MongoDB buforuje najczęściej używane dokumenty w pamięci i przechowuje je tam, chyba że musi wykorzystać pamięć dla innego dokumentu. Więc jeśli zapytanie uzyskuje dostęp do dokumentów już zapisanych w pamięci podręcznej z poprzedniego zapytania, powinno to być szybsze.

Również w MongoDB agregacja używa indeksów tylko na początku, jeśli takie istnieją. Na przykład $match i $sort fazy mogą używać indeksów. W Twoim przypadku $match jest pierwszym etapem potoku, więc jest to wygrana.

W MongoDB dane są przechowywane w BSON , więc daty są w zasadzie liczbami kiedy są porównywane. Więc nie ma różnicy.

Chociaż nie testowałem tego, naprawdę wątpię, aby podejście time_bucket dało szybszą reakcję. Od created_at będzie zawsze rosła, indeks w tym przypadku również zostanie dołączony na końcu bez time_bucket. Co więcej, rozmiar indeksu będzie stosunkowo duży, gdy zostanie utworzony na tablicy niż w prostym polu daty. Czy to nie spowoduje problemu z dopasowaniem indeksu do pamięci RAM.

Użycie time_bucket ma sens, gdy przed dopasowaniem używasz jakiejś funkcji w polu daty. Jeśli przed dopasowaniem wyodrębnisz tylko rok z pola daty, istniejący indeks w tej dacie stanie się bezużyteczny.

Zawsze lepiej jest rzutować parametry tak, aby pasowały do ​​typu danych w bazie danych, zamiast na odwrót.

Tak, to możliwe. Jeśli to $ i , wystarczy określić wszystkie filtry oddzielone przecinkami w $match faza. Jeśli jest to $lub użyj $lub operator.

Jeśli masz dwa $macth fazy jedna po drugiej MongoDB łączy je w jedną . Nie musisz się więc martwić o dodawanie wyników wielu faz meczu.

Teraz Twoja Optymalizacja Punkty

Tak, zapytania objęte zakresem są znacznie szybsze.

Jeśli rozmiar dokumentów jest zmniejszony w grupie $ etap za pomocą $projektu , to tak, to prawda.

Niekoniecznie to prawda, ale generalnie tak jest. Możesz sprawdzić tę odpowiedź .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ramy agregacji MongoDB i etapy agregacji

  2. Wyświetlaj i udostępniaj pliki z GridFS za pomocą Flask

  3. MongoDb Distinct ze sterownikiem zapytania C#

  4. Jak używać zmiennych w zapytaniu MongoDB?

  5. Mongoose Saved _id's jako ciąg zamiast ObjectId