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

Kolekcja fragmentaryczna MongoDB nie jest ponownie równoważona

W MongoDB, gdy idziesz do systemu podzielonego na fragmenty i nie widzisz żadnego balansowania, może to być jedna z kilku rzeczy.

  1. Możesz nie mieć wystarczającej ilości danych, aby wyzwolić równoważenie. To zdecydowanie nie była twoja sytuacja, ale niektórzy mogą nie zdawać sobie sprawy, że przy domyślnym rozmiarze porcji 64 MB może zająć trochę czasu wstawianie danych, zanim będzie wystarczająco dużo, aby podzielić i zrównoważyć niektóre z nich na inne porcje.

  2. System równoważenia mógł nie działać - ponieważ Twoje inne kolekcje były równoważone, było to mało prawdopodobne w Twoim przypadku, chyba że ta kolekcja została podzielona na fragmenty jako ostatnia po zatrzymaniu systemu równoważenia z jakiegoś powodu.

  3. Nie można przenieść porcji w Twojej kolekcji. Może się to zdarzyć, gdy klucz fragmentu nie jest wystarczająco szczegółowy, aby podzielić dane na wystarczająco małe porcje. Jak się okazuje, tak było w Twoim przypadku, ponieważ klucz fragmentu okazał się niewystarczająco szczegółowy dla tak dużej kolekcji – masz 105 fragmentów (co prawdopodobnie odpowiada liczbie unikalnych wartości job_id) i ponad 30 GB danych. Kiedy porcje są zbyt duże i system wyważający nie może ich przenieść, oznacza je jako „jumbo” (więc nie będzie obracał się kołem, próbując je przenieść).

Jak odzyskać sprawność po złym wyborze klucza odłamkowego? Zwykle zmiana klucza fragmentu jest bardzo bolesna — ponieważ klucz fragmentu jest niezmienny, musisz wykonać odpowiednik pełnej migracji danych, aby umieścić go w kolekcji z innym kluczem fragmentu. Jednak w twoim przypadku kolekcja nadal znajduje się na jednym fragmencie, więc powinno być stosunkowo łatwe "oddzielenie" kolekcji i ponowne jej sharding za pomocą nowego klucza sharda. Ponieważ liczba identyfikatorów job_id jest stosunkowo niewielka, zalecałbym używanie zwykłego indeksu do dzielenia na job_id,customer_code, ponieważ prawdopodobnie pytasz o to i domyślam się, że jest on zawsze ustawiany w czasie tworzenia dokumentu.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. przywracanie zrzutu za pomocą mongodb nie powiedzie się

  2. Agregacja Mongo z danymi podzielonymi na strony i sumami

  3. Przypadki użycia NoSQL

  4. MongoDB $binarySize

  5. Nie można uwierzytelnić w mongo, auth nie powiodło się