2010-01-26 4 views

Antwort

102

Sharding ist fast Replikations-Antithese, obwohl sie orthogonale Konzepte sind und gut zusammenarbeiten.

Beim Sharding, auch Partitionierung genannt, werden die Daten nach Schlüssel aufgeteilt. Während der Replikation, auch bekannt als Spiegelung, werden alle Daten kopiert.

Das Sharding ist nützlich, um die Leistung zu erhöhen und die Treffer- und Speicherbelastung für eine Ressource zu reduzieren. Die Replikation ist für eine hohe Verfügbarkeit von Lesevorgängen nützlich. Wenn Sie von mehreren Replikaten lesen, verringern Sie auch die Trefferquote für alle Ressourcen, aber der Speicherbedarf für alle Ressourcen bleibt gleich. Es sollte beachtet werden, dass die Replikation Master-> Slave ist, während Sie in einen Slave schreiben können. Sie können also nicht auf diese Weise skalieren.

Angenommen, Sie haben die folgenden Tupel: [1: Apfel], [2: Banane], [3: Kirsche], [4: Durian] und wir haben zwei Maschinen A und B. Mit Sharding könnten wir Schlüssel speichern 2,4 an Maschine A; und Schlüssel 1,3 auf Maschine B. Bei der Replikation speichern wir die Schlüssel 1, 2, 3, 4 an Maschine A und 1, 2, 3, 4 an Maschine B.

Verschärfung wird typischerweise durch Ausführen eines konsistenten Hash implementiert auf den Schlüssel. Das obige Beispiel wurde mit der folgenden Hash-Funktion implementiert: h (x) {return x% 2 == 0? A: B}.

Um die Konzepte zu kombinieren, könnten wir jeden Shard replizieren. In den obigen Fällen könnten alle Daten (2, 4) von Maschine A auf Maschine C repliziert werden und alle Daten (1, 3) von Maschine B könnten auf Maschine D repliziert werden.

Beliebige Schlüssel- Wertspeicher (von denen Redis nur ein Beispiel ist) unterstützt Sharding, obwohl bestimmte Cross-Key-Funktionen nicht mehr funktionieren. Redis unterstützt die Replikation direkt aus der Box.

+6

kühlen. Ich denke, die Antwort nicht nur beschränkt auf redis – joetsuihk

+3

Gute Antwort (im Allgemeinen), aber beantwortet nicht wirklich die Frage imho :) –

+2

Ich denke, diese Antwort bietet eine gute Antwort auf das, was der Fragesteller gefragt. Stark vereinfachte, aber korrekte Erklärung. +1 –

14

In einfachen Worten, der grundlegende Unterschied zwischen den beiden Konzepten ist, dass Sharding verwendet wird, um Writes zu skalieren, während Replikation verwendet wird, um Lesen zu skalieren. Wie Alex bereits erwähnt hat, ist Replikation auch eine der Lösungen, um HA zu erreichen.

Ja, beide werden normalerweise zusammen verwendet, wenn Sie in Betracht ziehen, wie Shards über Knoten in einem Cluster repliziert werden können.

In Bezug auf Ihre dritte Frage, ist es besser, anstelle der RAM-Flush-Option die Redis Append Only File (AOF) zu verwenden. Mit nur geringen Kosten (in Bezug auf die Schreibgeschwindigkeit) erhalten Sie viel mehr Zuverlässigkeit Ihrer Schreibvorgänge. Es ist vergleichbar mit dem Binärlog von MySQL. Die 1 fsync/Sekunde ist die empfohlene Option.