2013-05-07 5 views
8

Unterstützt Apache Cassandra Sharding?Unterstützt Cassandra Sharding?

Entschuldigen Sie, dass diese Frage trivial erscheinen muss, aber ich kann nicht die Antwort finden. Ich habe gelesen, dass Cassandra teilweise nach GAEs Big Table modelliert wurde, die in großem Maßstab zerbricht. Aber die meisten Dokumente, die ich gerade auf Cassandra finde, scheinen zu implizieren, dass Cassandra Daten nicht horizontal auf mehrere Maschinen verteilt, sondern viele Duplikate unterstützt. Dies würde bedeuten, dass Cassandra eine gute Anpassung an die hohe Verfügbarkeit darstellt, aber irgendwann zusammenbrechen würde, wenn das Schreibvolumen sehr hoch werden würde.

Antwort

13

Cassandra partitioniert über Knoten (weil, wenn Sie es nicht teilen können Sie es nicht skalieren). Alle Daten für einen Cassandra-Cluster sind auf "den Ring" aufgeteilt und jeder Knoten im Ring ist für einen oder mehrere Schlüsselbereiche verantwortlich. Sie haben die Kontrolle über den Partitionierer (z. B. zufällig, geordnet) und auf wie viele Knoten im Ring ein Schlüssel/Spalte basierend auf Ihren Anforderungen repliziert werden soll.

Dies enthält einen ziemlich guten Überblick. Basic architecture

Ich empfehle auch, das Dynamo White Paper zu lesen. Während Cassandra in vielerlei Hinsicht anders ist als Dynamo, stammen sie konzeptionell aus denselben Wurzeln. Probieren Sie es aus: Dynamo White Paper

+0

Ok, Schlüsselfrage: Kann Cassandra mit größeren als und weniger als Operatoren in Olog (n) Zeit abgefragt werden? –

+0

Dies hängt davon ab, ob Sie Random oder Ordered Partitioner verwendet haben. Random Partitioner wird gleichmäßig über die Knoten verteilt, daher ist es möglich, dass eine Bereichsabfrage die meisten/alle Knoten treffen muss, um die Daten abzurufen ... also vielleicht O (n). Mit Ordered Partitioner kann Cassandra genau bestimmen, welche Knoten abgefragt werden und alles auf dem Ring dazwischen zurückgeben. Dies geschieht jedoch auf Kosten einer gleichmäßigen Datenverteilung (d. H. Hallo Hotspots). Es gibt Möglichkeiten, Bereichsabfragen auszuführen (z. B. erstellen Sie einen eigenen Index, bei dem der Zeilenschlüssel eine Spalte ist). Dies rechtfertigt eine andere Frage/Diskussion an sich. –

+0

Werden die partitionierten Daten auf allen Knoten repliziert, die für die Replikation eingerichtet sind? – user3587180

-3

Ja, Cassandra unterstützt Sharding, aber auf seine Weise.

In Mongodb enthält jeder sekundäre Knoten die vollständigen Daten des primären Knotens, aber in Cassandra ist jeder sekundäre Knoten dafür verantwortlich, nur einige wichtige Datenpartitionen zu behalten.

+7

Sie verschmelzen MongoDB [* Replikation *] (http://docs.mongodb.org/manual/replication/) (wobei Secondaries eine vollständige Kopie der Daten für Redundanz enthalten) mit [* sharding *] (http://docs.mongodb.org/manual/sharding/) (Partitionieren einer logischen Datenbank über mehrere Maschinen hinweg). Wenn Sie Sharding durchführen, möchten Sie normalerweise, dass jeder Shard von einem Replikatsatz unterstützt wird, aber die beiden Konzepte sind tatsächlich orthogonal. – Stennie