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

Zwiększanie limitu pamięci dla zadań agregujących mongodb

Cóż, nie, nie ma ustawień i jeśli naprawdę się nad tym zastanowisz, jest ku temu dobry powód. Więc jeśli najpierw zastanowisz się, co robi agregat i co ogólnie robi MongoDB, powinno to stać się jasne.

Oto, co „powinien” być na czele każdego rozsądnego potoku agregacji:

db.collection.aggregate([
    { "$match:{ /* Something here */ } },

A oto powody:

  1. To ma dobry sens wypróbować aby zmniejszyć zestaw roboczy, na którym operujesz w dowolnym operacja.

  2. Jest to również jedyny pojawi się możliwość skorzystania z indeksu, aby pomóc w przeszukiwaniu zaznaczenia. Co oznacza zawsze lepsze niż skanowanie kolekcji.

  3. Mimo że istnieje wbudowany „optymalizator” który szuka takich rzeczy jak "projekcje" ograniczające "wybrane" pola, najlepszym kontrolującym rozmiar zestawu roboczego jest tylko pracować na ważnych zapisach. Mecze na późniejszych etapach nie są „zoptymalizowane” w ten sposób. (Patrz punkt 1 )

Następną rzeczą do rozważenia jest ogólne zachowanie MongoDB. Aby proces serwera chce do zrobienia, to "konsumować" tak dużo dostępnej pamięci maszyny, jak to możliwe, aby przechowywać dane „zestawu roboczego” ( kolekcje i/lub indeks ) w celu „pracy” na tych danych w najskuteczniejszy sposób .

Więc naprawdę jest w „najlepszym interesie” silnika bazy danych, aby „wydawać” większość alokacji pamięci w ten sposób. W ten sposób zarówno „agregacja” praca i wszystkie inne współbieżne procesy mają dostęp do "danych roboczych" w przestrzeni pamięci.

Dlatego jest „nieoptymalny” dla MongoDB do „kradzieży” ta alokacja pamięci z dala od innych jednoczesnych operacji po prostu do obsługi bieżącej operacji agregacji.

W „programowaniu do wymagań sprzętowych” terminów, dobrze zdajesz sobie sprawę, że przyszłe wydania pozwalają potoku agregacji na zaimplementowanie „wykorzystania dysku” w celu umożliwienia większego przetwarzania. Zawsze możesz zaimplementować dyski SSD lub inne szybkie technologie przechowywania. I oczywiście „10%” pamięci RAM zależy od ilości pamięci RAM zainstalowanej w systemie. Dzięki temu zawsze możesz zwiększać to.

Podsumowując, MongoDB ma rzeczywistą pracę bycia „jednoczesnym magazynem danych” i robi to dobrze. Czym nie jest jest konkretną „agregacja pracownik " i nie powinny być traktowane jako takie.

Więc albo „zerwanie” obciążenie pracą lub zwiększenie specyfikację sprzętu lub po prostu przełącz dużą aktywność „wykonywanie zadań” na coś, co robi skoncentruj się na uruchomionym zadaniu, takim jak styl Hadoop "mapReduce" i pozostaw MongoDB z jego pracą obsługi danych.

Możesz też oczywiście zmienić projekt, aby po prostu „wstępnie agregować” wymagane dane gdzieś „przy zapisie” .

Jak to się mówi, „Konie na kursy” lub użyj swoich narzędzi do ich zaprojektowania dla .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. zapytanie mongodb używające obiektu _id w wyszukiwaniu localField

  2. Łączenie się ze zdalnym serwerem mongoDB

  3. Jak zwrócić wartości wariantów każdego produktu, jeśli ten produkt jest wariantem?

  4. Błąd przetwarzania JSON mongoexport

  5. MongoDb:$geoIntersects dla wielu współrzędnych wejściowych