¿Nuevo proyecto Cassandra-Astyanax o Java Driver?
datastax-java-driver (5)
Definitivamente, debería ir con el nuevo DataStax Java Driver y Cassandra 1.2 para un nuevo proyecto que está comenzando. El conductor acaba de irse a GA, y tanto el conductor como Cassandra 1.2 solo se volverán más estables en los próximos meses a medida que desarrollen su nuevo proyecto.
Estoy comenzando un nuevo proyecto con Cassandra (y planeo usar la última versión estable (1.2.x)). He probado varias bibliotecas de Java diferentes, como Hector , Astyanax , Cassandra-jdbc ...
Entre ellos, (en resumen) mi elección es Astyanax. Pero luego también encontré y probé el controlador Java de DataStax, que es compatible con el nuevo protocolo binario CQL, y es mucho más limpio si solo está utilizando CQL. Y parece que la versión 1.0.0 GA será lanzada pronto.
¿Cuál recomendarías? Gracias.
Estoy de acuerdo con Zanson / Valchkou. DataStax Java Driver es el futuro. Es muy conveniente operar Cassandra con SQL. Mientras tanto, también recomiendo CassandraExecutor , un envoltorio simple de DataStax Java Driver . En comparación con el controlador de Java, CassandraExecutor tiene las siguientes características:
- API consistentes / integradas / concisas para operaciones (sincronizadas / asíncronas) (CRUD) con SQL / entidad.
- DataSet , que admite distintas / merge / sort / groupBy / join / union / unionAll / except / intersect / paginate / filter / count / toJOSN / toXML / toCVS ...
Aquí hay un ejemplo simple de CRUD (crear / leer / actualizar / eliminar):
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);
(Declaración: Soy el desarrollador de CassandraExecutor)
He usado Astyanax. Está bien documentado y es fácil de usar, siempre que no tenga problemas para escribir 5 veces más código que CQL.
En este momento estoy usando CQL porque las personas con las que he trabajado no han comprendido completamente el código Astyanax, por eso tienen que escribir la clase para los nombres de columna. Creo que nunca entenderás los aspectos internos de Cassandra si no usas Astyanax o Hector.
Personalmente he usado Hector, Astyanax, Pelops, Fluent Cassandra, Datastax''s Driver y Pycassa y después de usar tantas API''s, finalmente me di cuenta de que Astyanax me conviene mejor (es mi consideración personal).
La característica que encontré en Astyanax que la diferencia de otras en la liga es
- Facilidad de uso de la API.
- Soporte de columna compuesta
- Agrupación de conexiones
- Estado latente
- Documentación
- Actualizado
Te aconsejo que vayas con un controlador basado en cql3. Algunas opciones son el controlador JDBC o, incluso mejor, el controlador Datastax que admite conexiones asíncronas. Es posible que tenga que compilar el controlador de datastax usted mismo, pero esto puede hacerse con facilidad utilizando maven.
Thrift no va a recibir ninguna característica nueva en Cassandra, se mantiene para comparaciones al revés y la mayoría de los miembros de la comunidad C * utilizan controladores basados en cql para nuevos proyectos:
Como se describió anteriormente, creemos que CQL3 es una API más simple y mejor para Cassandra que la API de ahorro. Por lo tanto, se alienta a los nuevos proyectos / aplicaciones a usar CQL3
- source
Además, el rendimiento de CQL está mejorando muy rápidamente. Aquí hay algunos benchmarks. obsoletos benchmarks.
ACTUALIZAR
Desde que se escribió la respuesta, se creó un repositorio central de maven para el controlador, por lo que ahora para usarlo solo agregue la dependencia a maven:
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-parent</artifactId>
<version>1.0.0</version>
</dependency>