MongoDB - fragmentowanie
Sharding to proces przechowywania rekordów danych na wielu komputerach i podejście MongoDB do sprostania wymaganiom wzrostu ilości danych. Wraz ze wzrostem rozmiaru danych pojedynczy komputer może nie być wystarczający do przechowywania danych ani zapewniania akceptowalnej przepustowości odczytu i zapisu. Sharding rozwiązuje problem ze skalowaniem poziomym. Dzięki fragmentowaniu dodajesz więcej maszyn w celu obsługi wzrostu danych oraz wymagań operacji odczytu i zapisu.
Dlaczego sharding?
W replikacji wszystkie zapisy trafiają do węzła głównego
Zapytania wrażliwe na opóźnienia nadal przechodzą do stanu głównego
Pojedynczy zestaw replik ma ograniczenie do 12 węzłów
Pamięć nie może być wystarczająco duża, gdy aktywny zbiór danych jest duży
Dysk lokalny nie jest wystarczająco duży
Skalowanie w pionie jest zbyt kosztowne
Sharding w MongoDB
Poniższy diagram przedstawia fragmentowanie w MongoDB przy użyciu podzielonego na fragmenty klastra.
Na poniższym schemacie są trzy główne komponenty -
Shards- Odłamki służą do przechowywania danych. Zapewniają wysoką dostępność i spójność danych. W środowisku produkcyjnym każdy fragment jest oddzielnym zestawem replik.
Config Servers- Serwery konfiguracyjne przechowują metadane klastra. Te dane zawierają odwzorowanie zestawu danych klastra na fragmenty. Router zapytań wykorzystuje te metadane do kierowania operacji na określone fragmenty. W środowisku produkcyjnym podzielone na fragmenty klastry mają dokładnie 3 serwery konfiguracyjne.
Query Routers- Routery zapytań to w zasadzie instancje mongo, interfejs z aplikacjami klienckimi i bezpośrednie operacje do odpowiedniego fragmentu. Router zapytań przetwarza i kieruje operacje do fragmentów, a następnie zwraca wyniki do klientów. Klaster podzielony na fragmenty może zawierać więcej niż jeden router zapytań, aby podzielić obciążenie żądaniami klienta. Klient wysyła żądania do jednego routera kwerend. Ogólnie rzecz biorąc, podzielony na fragmenty klaster ma wiele routerów zapytań.