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

Odłamki MongoDB i niezrównoważone obciążenia agregacji

Struktura agregacji jest istotnym trybem w infrastrukturze MongoDB. Pomaga analizować, podsumowywać i agregować dane przechowywane w MongoDB. Więcej informacji na temat struktury agregacji w MongoDB 2.6 znajdziesz w tym poście na blogu.

W wersji 2.6 MongoDB dokonał subtelnej, ale znaczącej zmiany w sposobie wykonywania podstawowych potoków agregacji w środowisku podzielonym na fragmenty. Podczas pracy z kolekcjami podzielonymi na fragmenty MongoDB dzieli potok na dwa etapy. Pierwszy etap lub faza „$match” przebiega na każdym fragmencie i wybiera odpowiednie dokumenty. Jeśli planista zapytań ustali, że fragment nie jest istotny na podstawie kluczy fragmentów, wówczas ta faza nie jest wykonywana na tym fragmentu.

Kolejne etapy przebiegają tylko na „podstawowym” fragmencie kolekcji. Ten fragment scala dane z innych fragmentów i uruchamia resztę potoku. Powoduje to znacznie większe obciążenie podstawowego fragmentu agregowanej kolekcji. Oto przykład jednego z naszych klientów korzystającego z trzech fragmentów i używającego głównie zapytań agregujących:

Jak widać, obciążenie pierwszego fragmentu jest konsekwentnie 3-4 razy większe od innego powodu. Jest to skrajny przykład, ponieważ dzieje się tak w przypadku późniejszego dodania drugiego i trzeciego fragmentu, stąd fragmentem podstawowym dla wszystkich kolekcji jest fragment pierwszy. Zasadniczo więc kolejne etapy wszystkich naszych zadań agregacji działają tylko na Shard1. Jeśli sprawdzisz dzienniki w głównym fragmencie, zobaczysz szereg poleceń „scalania” pobierających dane z innych fragmentów.

Przed wersją 2.6 kolejne etapy potoku agregacji były uruchamiane na serwerach MongoDB, a nie na podstawowym fragmencie.

Jak więc radzisz sobie z tym nierównomiernym rozkładem obciążenia? Masz kilka opcji:

  1. Jeśli używasz agregacji na wielu kolekcjach, upewnij się, że „podstawowe odłamki” kolekcji są równomiernie rozłożone na Twoich odłamkach.
  2. Jeśli masz duże obciążenie agregacji tylko w jednej kolekcji, być może będziesz musiał użyć nieco większych maszyn dla swojego podstawowego fragmentu.

Jak zawsze, jeśli masz jakieś pytania lub komentarze, napisz do nas na adres [email protected].


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie można uzyskać allowDiskUse:True to work z pymongo

  2. mongodb - utwórz dokument, jeśli nie istnieje, w przeciwnym razie przesuń do tablicy

  3. Jak sprawdzić, czy pole tablicy jest częścią innej tablicy w MongoDB?

  4. Wydajność MongoDB:uruchamianie agregacji MongoDB na serwerach pomocniczych

  5. Usługa mongodb się nie uruchamia