Sharding jest prawie antytezą replikacji, chociaż są to koncepcje ortogonalne i dobrze ze sobą współpracują.
Sharding, znany również jako partycjonowanie, to dzielenie danych według klucza; Podczas gdy replikacja, znana również jako dublowanie, polega na kopiowaniu wszystkich danych.
Dzielenie na fragmenty jest przydatne w celu zwiększenia wydajności, zmniejszenia liczby trafień i obciążenia pamięci dowolnego zasobu. Replikacja jest przydatna do uzyskania wysokiej dostępności odczytów. Jeśli czytasz z wielu replik, zmniejszysz również współczynnik trafień we wszystkich zasobach, ale wymagania dotyczące pamięci dla wszystkich zasobów pozostaną takie same. Należy zauważyć, że chociaż możesz pisać do slave'a, replikacja jest tylko master->slave. Więc nie możesz skalować zapisów w ten sposób.
Załóżmy, że masz następujące krotki:[1:Apple], [2:Banana], [3:Cherry], [4:Durian] i mamy dwie maszyny A i B. Dzięki Sharding możemy przechowywać klucze 2,4 na maszyna A; oraz klucze 1,3 na maszynie B. Dzięki replikacji przechowujemy klucze 1,2,3,4 na maszynie A i 1,2,3,4 na maszynie B.
Dzielenie na fragmenty jest zazwyczaj realizowane przez wykonanie spójnego mieszania na kluczu. Powyższy przykład został zaimplementowany za pomocą następującej funkcji skrótu h(x){return x%2==0?A:B}.
Aby połączyć koncepcje, moglibyśmy powtórzyć każdy odłamek. W powyższych przypadkach wszystkie dane (2,4) maszyny A można zreplikować na maszynę C, a wszystkie dane (1,3) maszyny B można zreplikować na maszynę D.
Każdy magazyn klucz-wartość (których Redis jest tylko jednym przykładem) obsługuje fragmentowanie, chociaż niektóre funkcje klucza krzyżowego nie będą już działać. Redis obsługuje replikację po wyjęciu z pudełka.