2010-06-04 6 views
25

Ich gehe durch Apache Cassandra und arbeite an Beispieldaten einfügen, Abruf usw.Cassandra - Transaktionsunterstützung

Die Dokumentation ist sehr begrenzt.

Ich bin an

  • wissen, können wir Relation vollständig ersetzen db wie mysql/oracle mit Cassandra?
  • unterstützt Cassandra Rollback/Commit?
  • unterstützt cassandra clients (sparf/hector) das Abrufen von verknüpften Objekten (Objekte, in denen wir den Schlüssel einer Superspalte in einer anderen Superspaltenfamilie speichern)?

Dies wird mir sehr helfen, weiter zu gehen.

danke im voraus.

Antwort

26

Kurze Antwort: Nein.

konstruktions Werte Cassandra Verfügbarkeit und Partitionstoleranz über Konsistenz 1. Grundsätzlich ist es nicht möglich, eine akzeptable Latenz zu erhalten, während alle drei Qualitäten erhalten bleiben: man muss geopfert werden. Dies wird CAP-Theorem genannt.

Die Konsistenzmenge ist in Cassandra mit Konsistenzstufen konfigurierbar, aber es gibt keine Semantik für das Zurücksetzen. Es gibt keine Garantie dafür, dass Sie Ihre Änderungen rückgängig machen können, selbst wenn der erste Schreibvorgang erfolgreich ist.

Wenn Sie Anwendungen mit Transaktionen oder Sperren auf Cassandra erstellen möchten, sollten Sie sich vielleicht Zookeeper ansehen, der für die verteilte Synchronisation verwendet werden kann.

Sie haben das vielleicht schon erraten, aber Cassandra hat keine Fremdschlüssel oder ähnliches. Dies muss manuell behandelt werden. Ich bin mit Hector nicht so vertraut, aber ein Client auf höherer Ebene könnte das halbautomatisch machen.

Ob Sie Cassandra zum einfachen Austausch eines RDBMS verwenden können, hängt von Ihrem spezifischen Anwendungsfall ab. In Ihrem Anwendungsfall (basierend auf Ihren Fragen) könnte es schwierig sein.

+0

Dank Lautis. Nachdem wir alle Features in Betracht gezogen hatten, entschieden wir uns nicht für Cassandra und relationale Datenbank. –

+1

Guter Thread auf der Cassandra-Mailingliste über Transaktionen: http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/best-practices-for-simulation-transactions-in-Cassandra-td7064256.html – Zanson

+0

Danke. Gute Antwort! – Amresh

2

Wenn Zookeeper Transaktionen mit Oracle-Qualität abwickeln kann, ist das erledigt. Relationen und die Integrität der Beziehungen sind kein Problem, das zusätzlich zu JEDER Datenbank implementiert werden kann. Ein Fremdschlüssel ist nur ein anderes Datenfeld. ACID/Transaktionen ist das Schlüsselproblem.

+0

Ich stimme nicht zu, dass der Fremdschlüssel nur ein anderes Datenfeld ist. Die Art der Erzwingung, die in SQL-Datenbanken implementiert wird, wird gehandhabt, wenn die Daten von einer anderen Verbindung gelöscht werden, gerade wenn Ihre Verbindung versucht, darauf zu verweisen. Es wird eine der Verbindungen ordnungsgemäß ablehnen. Wie würden Sie dies erzwingen, wenn Sie in einer höheren Schicht implementieren, ohne Synchronisierung von Sperren und Ressourcen, die sich ebenfalls auf die Leistung auswirkt? –

5

In Version 2.x können Sie CQL-Anweisungen in protokollierten batch kombinieren, die atomar ist. Entweder alle oder keine der Anweisungen sind erfolgreich. Sie können auch über lightweight transactions lesen. Mehr als das - es gibt mehrere Persistenz-Manager für Cassandra. Sie können das Verhalten von Fremdschlüsseln auf Client-Ebene mit ihnen erreichen. Zum Beispiel Achilles und Kundera.