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

Duży indeks MongoDB buduje się bardzo wolno

Błędy

Prędkość

Nawet jeśli nie mówimy o indeksie wielokluczowym, oto co się dzieje. Trwa ogromne skanowanie tabeli. Tak więc mongoDB iteruje po dokumentach, próbuje znaleźć pole do indeksowania, ocenia to pole (do null jeśli nie istnieje w bieżącym dokumencie) i zapisuje swoje wyniki w nie mniej niż 6 plikach, ponieważ mówimy o 6 indeksach. Obliczenie:200.000.000 / 86400 * 5 mówi nam, że mongoDB robi to dla około 460 dokumentów na sekundę lub potrzebuje tylko 2,2 milisekundy na dokument . Nie nazwałbym tego powolnym. Może to potrwać długo, ale nie jest wolne.

{background:true}

Użycie tego parametru nie zablokować cię z baz danych. Wręcz przeciwnie, co jest jasno określone w dokumentacji, zarówno na stronie Sekcja tworzenia indeksu oraz w sekcji samouczka na temat tworzenia indeksów w tle . Istnieje jednak zdanie, które łatwo można błędnie zinterpretować:

Oznacza to, że nie możesz wykonywać operacji, które dotyczą wszystkich baz danych i wymagają blokady odczytu lub zapisu.

Sposoby poprawy (w przyszłości)

Klaster podzielony

Użyj udostępnionego klastra z fragmentami zestawu replik. Jest łatwy w konfiguracji i ma wiele zalet poza poprawioną wydajnością. Jednym z nich jest łatwa skalowalność, dodanie fragmentu (a tym samym dodanie przestrzeni i mocy obliczeniowej do klastra) jest bardzo łatwo. Kopie zapasowe mają mniejszy wpływ na aplikację. Nie ma już pojedynczego punktu awarii (gdy zostanie to zrobione prawidłowo, dotyczy to nawet przestojów w skali całego centrum danych).

Użyj innego systemu plików

Przepraszamy, uruchamianie aplikacji zależnej od wydajności we/wy dysku na Windows Server nie ma dla mnie sensu – w ogóle. ExtFS4 lub XFS są od 25% do 40% szybsze niż NTFS lub ReFS, w zależności od optymalizacji. To sprawia, że ​​prawdziwe różnica w aplikacjach, które są tak zależne od dysku we/wy, jak Twój przypadek użycia. Mówimy o kilku dniach (nawet nie biorąc pod uwagę wydajniejszego mapowania pamięci i zmniejszonego zużycia pamięci przez system operacyjny w systemach Linux).

{background:true}

Chociaż tak naprawdę nie poprawia to wydajności (w rzeczywistości budowanie indeksów w tle trwa dłużej niż na pierwszym planie z oczywistych powodów), aplikacja pozostaje dostępna w czasie, w którym budowany jest indeks. Więc w zależności od Twoich potrzeb, może to być realna opcja.

Uwaga boczna :to zły pomysł™ , aby skalować w pionie podczas korzystania z mongoDB, ponieważ został on wyraźnie zaprojektowany do skalowania w poziomie. Dotyczy to szczególnie dużych kolekcji, takich jak Twoja, ponieważ przetwarzanie równoległe znacznie poprawiłoby wydajność Twojej aplikacji.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kolba mongoengine łączy się przez uri

  2. Wsparcie geoprzestrzenne w MongoDB

  3. Optymalizacja zapytań MongoDB

  4. wybierz odrębny mongodb C#

  5. Modyfikuj i odtwarzaj oplog MongoDB