2010-01-26 12 views

Odpowiedz

102

Sharding jest niemal antytezą replikacji, chociaż są to pojęcia ortogonalne i dobrze ze sobą współpracują.

Sharding, znany również jako partycjonowanie, dzieli dane według klucza; Replikacja, określana również jako dublowanie, polega na kopiowaniu wszystkich danych.

Sharding jest przydatny do zwiększenia wydajności, zmniejszając obciążenie i obciążenie pamięci w jednym zasobie. Replikacja jest przydatna w przypadku wysokiej dostępności odczytów. Jeśli czytasz z wielu replik, zmniejszysz także trafność wszystkich zasobów, ale wymagania dotyczące pamięci dla wszystkich zasobów pozostaną takie same. Należy zauważyć, że podczas gdy możesz pisać do slave, replikacja jest tylko master-> slave. Więc nie można tak pisać w skali.

Załóżmy, że masz następujące krotki: [1: Apple], [2: Banan], [3: Czereśnia], [4: Durian] i mamy dwie maszyny A i B. Z Sharding, możemy przechowywać klucze 2,4 na maszynie A; i klawisze 1,3 na komputerze B. Przy replikacji przechowujemy klucze 1,2,3,4 na maszynie A i 1,2,3,4 na komputerze B.

Sharding jest zwykle realizowany przez wykonanie spójnego skrótu na klucz. Powyższy przykład został zaimplementowany z następującą funkcją skrótu h (x) {return x% 2 == 0? A: B}.

Aby połączyć koncepcje, możemy powielić każdy fragment. W powyższych przypadkach wszystkie dane (2,4) maszyny A mogą być replikowane na komputerze C, a wszystkie dane (1,3) maszyny B mogą być replikowane na komputerze D.

Dowolny klucz value store (którego Redis jest tylko jednym przykładem) obsługuje sharding, chociaż niektóre funkcje klucza nie będą działać. Redis obsługuje replikację po wyjęciu z pudełka.

+6

fajne. Myślę, że odpowiedź nie tylko ogranicza się do redis – joetsuihk

+3

Dobra odpowiedź (ogólnie), ale tak naprawdę nie odpowiada na pytanie imho :) –

+2

Myślę, że ta odpowiedź oferuje dobrą odpowiedź na pytanie zadane przez pytającego. Bardzo uproszczone, ale poprawne wyjaśnienie. +1 –

14

W prostych słowach podstawową różnicą między tymi dwoma koncepcjami jest to, że Sharding służy do skalowania zapisów, podczas gdy replikacja służy do skalowania odczytów. Jak już wspomniał Alex, replikacja jest również jednym z rozwiązań do osiągnięcia HA.

Tak, obie są zwykle używane razem, jeśli rozważymy, w jaki sposób repliki mogą być replikowane na węzłach w klastrze.

W odniesieniu do trzeciego pytania, zamiast opcji "Płukanie RAM", lepiej jest użyć pliku "Dołącz tylko do Redis" (AOF). Tylko niewielki koszt (pod względem prędkości zapisu) zapewnia znacznie większą niezawodność swoich zapisów. Jest całkiem podobny do dziennika binarnego mysql. Opcja 1 fsync/sekundę jest zalecaną opcją.