Zestaw replik oznacza, że masz wiele wystąpień MongoDB, z których każde odzwierciedla wszystkie dane. Zestaw replik składa się z jednego Mistrza (zwanego również „Pierwotnym”) i jednego lub więcej Niewolników (zwanych również Drugorzędnymi). Operacje odczytu mogą być obsługiwane przez dowolny element podrzędny, dzięki czemu można zwiększyć wydajność odczytu, dodając więcej elementów podrzędnych do zestawu replik (pod warunkiem, że aplikacja kliencka może faktycznie używać różnych elementów zestawu). Ale operacje zapisu zawsze odbywają się na systemie głównym zestawu replik, a następnie są propagowane do urządzeń podrzędnych, więc zapisy nie będą przyspieszane, gdy dodasz więcej urządzeń podrzędnych.
Zestawy replik oferują również odporność na uszkodzenia. Kiedy jeden z członków zestawu replik upada, inni przejmują kontrolę. Kiedy mistrz upadnie, niewolnicy wybiorą nowego mistrza. Z tego powodu jest to sugerowane do wdrożenia produkcyjnego, aby zawsze używać MongoDB jako replik zestawu co najmniej trzech serwerów, dwie z nich o objętości danych (trzecia to dane mniej „arbiter”, który jest wymagany do określenia nowego kapitanowi statku w chwili jeden z niewolników upada).
Sharded klastra oznacza, że każdy fragment klastra (która może być również zestawu replik) zajmuje część danych. Każde żądanie, zarówno do odczytu, jak i do zapisu, jest obsługiwane przez klaster, w którym znajdują się dane. Oznacza to, że wydajność odczytu i zapisu można zwiększyć, dodając więcej odłamków do klastra. Który dokument rezyduje, na którym odłamku decyduje klucz odłamka każdej kolekcji. Powinien zostać wybrany w taki sposób, aby dane mogły być równomiernie rozmieszczone we wszystkich klastrach i aby było jasne dla najczęstszych zapytań, w których znajduje się klucz niezależnego fragmentu (na przykład: gdy często user_name
pytasz, klucz niezależnego fragmentu powinien zawierać pole, user_name
aby każde zapytanie mogło być delegowane tylko do jednego fragmentu, który ma ten dokument).
Wadą jest to, że cierpi na to tolerancja na uszkodzenia. Gdy jeden fragment klastra ulegnie awarii, wszelkie dane w nim zawarte są niedostępne. Z tego powodu każdy członek klastra powinien być również zestawem replik. Nie jest to wymagane. Jeśli nie zależy ci na wysokiej dostępności, fragment może być pojedynczą instancją mongod bez replikacji . Ale do użytku produkcyjnego należy zawsze używać replikacji .
Co to oznacza dla twojego przykładu?
Sharded Cluster
/ | \
Shard A Shard B Shard C
/ \ / \ / \
+-------+ +---------+ +-------+ +---------+ +-------+ +---------+
|Primary| |Secondary| |Primary| |Secondary| |Primary| |Secondary|
| 25GB |=| 25GB | | 25 GB |=| 25 GB | | 25GB |=| 25GB |
+-------+ +---------+ +-------+ +---------+ +-------+ +---------+
Jeśli chcesz podzielić swoje dane o pojemności 75 GB na 3 odłamki po 25 GB każdy, potrzebujesz co najmniej 6 serwerów baz danych zorganizowanych w trzy zestawy replik. Każdy zestaw replik składa się z dwóch serwerów, które mają takie same 25 GB danych.
Potrzebujesz także serwerów dla arbitrów trzech zestawów replik, a także routera mongo i serwera konfiguracji dla klastra. Arbitrzy są bardzo lekcy i są potrzebni tylko wtedy, gdy członek zestawu repliki ulegnie awarii, więc zwykle mogą dzielić ten sam sprzęt z czymś innym. Ale router i serwer konfiguracji Mongos powinny być redundantne i na własnych serwerach.