2009-11-20 20 views
6

So sehe ich hier, dass Cassandra keinen automatischen Load Balancing hat, der bei der Verwendung des geordneten Partitioners in Sicht kommt (ein gewisser gemeinsamer Wertebereich einer Gruppe von Zeilen würde auf relativ wenigen Rechnern gespeichert werden, die dann die meisten davon bedienen würden) die Abfragen).
What's The Best Practice In Designing A Cassandra Data Model?Cassandra Load Balancing mit einem geordneten Partitionierer?

Ich bin noch neu zu Cassandra und wie es funktioniert. Wie würde man dieses Problem vermeiden, so dass Bereichsabfragen noch möglich sind? Ich habe die obige Antwort (verlinkte URL) nicht wirklich über das Anhängen eines Hashes an Schlüssel erhalten.

+0

Ich fand mehr Details über die 'anhängende Hash zu Schlüssel' Idee in diesem Blog http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/ – deepblue

Antwort

4

Ich denke, dieses Problem ist am besten auf der Cassandra-Benutzer-Mailing-Liste aufgegriffen; dort sind die Menschen.

Cassandra hat keinen automatischen Lastenausgleich noch aber es kann in nicht allzu ferner Zukunft tun. Der 0.5-Zweig kann dazu jetzt fähig sein.

Im Wesentlichen, wenn Sie einen Knoten auf einem bereits laufenden System bootstrappen, sollte es einen Punkt im Ring finden, der das Gleichgewicht am besten belastet und sich dort hinstellt. Vorausgesetzt, Sie fügen Knoten einzeln hinzu (d. H. Warten Sie, bis ein Knoten das Bootstrapping abgeschlossen hat, bevor Sie ein weiteres hinzufügen), sollte das ziemlich gut funktionieren, vorausgesetzt, Ihre Schlüsselverteilung ändert sich im Laufe der Zeit nicht zu sehr.

Ihre Schlüssel können sich jedoch im Laufe der Zeit ändern (insbesondere wenn sie zeitbasiert sind). Daher sollten Sie möglicherweise eine Problemumgehung verwenden.

Es hängt davon ab, was Sie Bereichsscan möchten. Wenn Sie nur den Bereich PART des Schlüssels durchsuchen müssen, können Sie das Bit hacken, das nicht im Bereich scannen soll, und diesen als ersten Teil des Schlüssels verwenden.

ich den Begriff „Partition“ hier zum Teil verweisen des Schlüssels wollen Sie nicht Scan verwenden werden

function makeWholeKey(partition, key) { 
    return concat(make_hash(partition), partition, key); 
} 

Nun reichen, wenn Sie die Schlüssel innerhalb einer bestimmten Partition reichen wollen scannen , können Sie Bereich scannen zwischen makeWholeKey (p, Start) und makeWholeKey (p, Ende)

Aber wenn Sie die Partitionen scannen wollen, haben Sie Pech gehabt.

Aber Sie können Ihre Knoten haben Token, die gleichmäßig um den Bereich der Ausgabe von make_hash() verteilt sind, und Sie erhalten gleichmäßig verteilten Daten (vorausgesetzt, Sie haben genug Partitionen, die nicht alle auf einer oder zwei Hash-Werte)

8

Wie in dem anderen Beitrag erwähnt, unterstützt Cassandra 0.5 halbautomatischen Lastenausgleich, wo alles, was Sie tun müssen, ist ein Knoten an loadbalance und es wird automatisch an einen belebter Ort auf dem Token-Ring bewegen.

Dies wird in bedeckt http://wiki.apache.org/cassandra/Operations

+0

Die Link funktioniert nicht mehr. Es bringt uns auf eine Seite, die besagt, dass die Dokumentation verschoben wurde und dieses Ziel führt uns zum Ursprung der Dokumentation ... Außerdem verstehe ich nicht, was Sie mit * "Knoten zu Lastenausgleich" * sagen. Warum sollte ich irgendjemand etwas erzählen ?! Es ist auch nicht klar, warum Sie zu einem belebteren Ort bewegen möchten, ist Load Balancing in der Regel umgekehrt. Vielleicht könnten Sie versuchen, zu klären? –

1

Partitionieren von Daten über Cluster durch den partitioner Parameter in cassandra.yaml gesteuert:

partitioner: org.apache.cassandra.dht.Murmur3Partitioner 

Murmur3Partitioner Verwendung gelegentliches Hashcode für Zeilenschlüssel generieren und Lastausgleich durchführen.

Mit Cassandra 2.0 können Sie mehrere Token (256) in einem einzelnen Server speichern, was auch beim Lastenausgleich hilft. Es ist nicht empfehlenswert, OrderPreservingPartitioner zu verwenden und ist veraltet.

+0

Beachten Sie, dass die Frage im Jahr 2009 um die Zeit von Cassandra 0,5 gestellt wurde ... Das stimmt, ich stimme zu, dass der Partitionierer das ist, von dem erwartet wird, dass er einen Cassandra-Cluster ausgleicht. –