我想将 cassandra 用于我的用例并搜索 java 客户端。我发现了许多用于 cassandra 的 java 接口以及 Spring 数据 cassandra。多年来我一直在使用弹簧。我想在性能和功能方面了解 spring data cassandra vs Astyanax。
2 回答
在选择 Cassandra 驱动程序时,要考虑的更重要的方面之一是它使用的核心协议。Astyanax 使用 Thrift,Spring 使用新的 CQL3 二进制协议。
为什么这很重要?
Cassandra 2.1与原始 Thrift 协议相比,在 CQL3/二进制协议方面带来了一些显着的性能提升。我之前(2 年前)使用过 Astyanax,当时它比 Hector 有了一些显着的改进。但是较新的基于 CQL3 的驱动程序更易于使用。现在它们的性能也优于基于 Thrift 的驱动程序,选择变得更加容易。
所以考虑到 Astyanax 和 Spring 之间的选择,我会选择 Spring。
不过老实说,如果您正在开始一个新项目,您应该考虑使用DataStax Java 驱动程序。它也是基于 CQL3/二进制的,并且最新版本有一些可用性改进,例如对象映射 API,大大简化了基本的 CRUD 操作。使用支持 DataStax 的驱动程序绝对不会出错。
试试CassandraExecutor,这是一个基于DataStax Java 驱动程序的简单包装器。与 Java Driver 相比,CassandraExecutor 具有以下特点:
- 用于 SQL/entity 的(同步/异步)操作 (CRUD) 的一致/集成/简洁 API。
- DataSet,支持 distinct/merge/sort/groupBy/join/union/unionAll/except/intersect/paginate/filter/count/toJOSN/toXML/toCVS...
这是一个简单的 CRUD(创建/读取/更新/删除)示例:
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);
(声明:我是CassandraExecutor的开发者)