2013-04-18 14 views
16

Ich beginne ein neues Projekt mit Cassandra (und plane, die neueste stabile (1.2.x) Version zu verwenden). Ich habe mehrere verschiedene Java-Bibliotheken versucht, wie Hector, Astyanax, Cassandra-jdbc ...Neues Cassandra-Projekt - Astyanax oder Java-Treiber?

Unter ihnen (kurz) meine Wahl ist Astyanax. Aber dann habe ich auch den DataStax-Java-Treiber gefunden und ausprobiert, der das neue CQL-Binärprotokoll unterstützt und viel sauberer ist, wenn Sie nur CQL verwenden. Und es scheint, dass Version 1.0.0 GA bald veröffentlicht wird.

Welche würden Sie empfehlen? Vielen Dank.

+2

+1 für Astyanax! Super api! –

Antwort

19

Ich würde Ihnen empfehlen, mit einem cql3-basierten Treiber zu gehen. Einige Optionen sind die JDBC driver oder sogar besser Datastax's driver, die asynchrone Verbindungen unterstützt. Möglicherweise müssen Sie den datastax-Treiber selbst erstellen, dies kann jedoch problemlos mit maven durchgeführt werden.

Thrift wird werden alle neuen Funktionen in Cassandra nicht bekommen, für die Rückwärts Vergleichbarkeit und die meisten C * Community-Mitglieder Rat seine gehaltener cql basierte Treiber für neue Projekte zu verwenden:

Wie oben beschrieben, Wir glauben, dass CQL3 eine einfachere und insgesamt bessere API für Cassandra ist als die Sparsamkeits-API. Daher werden neue Projekte/Anwendungen gefördert CQL3 verwenden

- source

Auch CQL die Leistung wird immer besser sehr schnell. Hier sind einige veraltete benchmarks.
UPDATE

Da die Antwort geschrieben wurde ein maven central repository wurde für den Fahrer geschaffen, so jetzt ist es zu benutzen Sie einfach die Abhängigkeit in den maven:

<dependency> 
    <groupId>com.datastax.cassandra</groupId> 
    <artifactId>cassandra-driver-parent</artifactId> 
    <version>1.0.0</version> 
</dependency> 
9

ich persönlich verwendet haben Hector, Astyanax, Pelops, Fluent Cassandra, Datastax's Driver und Pycassa und nachdem ich so viele API's benutzt hatte, wurde mir klar, dass Astyanax mir am besten steht (Es ist meine persönliche Überlegung).

Die Funktion i in astyanax gefunden, die es von anderen in der Liga unterscheiden sind

  • Einfache Bedienung des API
  • Composite-Säule Unterstützung
  • Verbindung Pooling
  • Latency
  • Dokumentation
  • Aktualisiert
+8

Die Treiber von Hector und Datastax unterstützen zusammengesetzte Spalten (ich bin mir nicht sicher über die anderen), und ich würde sagen, dass CQL einfacher zu benutzen ist als Astyanax. Auch Sparsamkeit ist auf dem Weg nach draußen, daher sollte CQL3 für neue Projekte verwendet werden. –

+2

Nun ich kenne Kumpel, eigentlich war meine Überlegung auf leichten Zugang. Ja CQL war immer eine einfachere Option und wird es auch bleiben (bekannte Tatsache RDBMS Hintergrund) und ich kann versichern, dass sogar maximale Prozent der Astyanax-Benutzer CQL-Anweisungen von ihrer API verwenden. – abhi

+9

+1 für Astyanax. CQL ist nicht einfacher - es ist nur scheinbar: Sie können einfach unperformed Abfragen schreiben und in Schwierigkeiten geraten, weil es Sie als relationale db macht und Sie nicht zwingt, Semantik von nosql Speicher wirklich zu verstehen. –

6

Ich habe Astyanax verwendet. Es ist gut dokumentiert und einfach zu verwenden, vorausgesetzt, Sie haben kein Problem, 5 mal mehr Code als CQL zu schreiben.

Im Moment benutze ich CQL als Leute, mit denen ich gearbeitet habe, haben den Astyanax-Code nicht ganz verstanden - warum sie Klasse für Spaltennamen schreiben müssen. Ich denke, du wirst das Innenleben von Cassandra niemals richtig verstehen, wenn du nicht Astyanax oder Hector benutzt.

4

Sie sollten auf jeden Fall mit dem neuen DataStax Java Driver und Cassandra 1.2 für ein neues Projekt gehen, das gerade beginnt. Der Fahrer ist gerade GA gegangen, und sowohl der Fahrer als auch Cassandra 1.2 werden in den nächsten Monaten immer stabiler, wenn Sie Ihr neues Projekt entwickeln.

1

Ich stimme mit Zanson/Valchkou. DataStax Java Driver ist die Zukunft. Es ist sehr praktisch, Cassandra mit SQL zu betreiben. Inzwischen empfehle ich auch CassandraExecutor, ein einfacher Wrapper von DataStax Java Driver. Im Vergleich zu dem Java-Treiber hat CassandraExecutor folgende Eigenschaften:

  • Konsistente/Integrated/Concise APIs für (Sync/Async) Operationen (CRUD) mit SQL/Einheit.
  • DataSet, die verschiedene unterstützt/Merge/Art/groupBy/join/union/UnionAll/except/intersect/Paginieren/Filter/Zähl-/toJOSN/ToXml/toCVS ...

Hier ist eine einfache CRUD (erstellen/lesen/update/delete) Beispiel:

Account account = createAccount(); 
// create 
String sql_insert = NE.insert(ID, GUI, FIRST_NAME, LAST_NAME, LAST_UPDATE_TIME, CREATE_TIME).into(Account.class).sql(); 
cassandraExecutor.execute(sql_insert, account); 

// read 
String sql_selectByGUI = NE.select(ID, GUI, FIRST_NAME, LAST_NAME).from(Account._).where(L.eq(ID, L.QME)).sql(); 
Account dbAccount = cassandraExecutor.queryForEntity(Account.class, sql_selectByGUI, account); 

// update 
String sql_updateByLastName = NE.update(Account.class).set(FIRST_NAME).where(L.eq(ID, L.QME)).sql(); 

dbAccount.setFirstName("newFirstName"); 
cassandraExecutor.execute(sql_updateByLastName, dbAccount); 

// delete 
String sql_deleteByFirstName = NE.deleteFrom(Account.class).where(L.eq(ID, L.QME)).sql(); 
cassandraExecutor.execute(sql_deleteByFirstName, dbAccount); 

(Erklärung: ich bin der Entwickler CassandraExecutor)