2013-04-18 70 views
16

我开始与Cassandra的新项目(并计划使用最新的稳定版(1.2.x版))。我尝试了几个不同的Java库,如Hector,Astyanax,Cassandra-jdbc ...新Cassandra项目 - Astyanax或Java驱动程序?

其中,(总之)我的选择是Astyanax。但后来我又发现并试用了DataStax的Java Driver,它支持新的CQL二进制协议,并且如果您仅使用CQL,则会更加清洁。看来版本1.0.0 GA即将发布。

你会推荐哪一个?谢谢。

+2

+1 Astyanax!真棒api! –

回答

19

我建议你使用基于cql3的驱动程序。一些选择是支持异步连接的JDBC driver或甚至更好的Datastax's driver。您可能必须自己构建datastax的驱动程序,但这可以使用maven轻松完成。

节俭是不会越来越在卡桑德拉的任何新功能,其被关了向后可比性和最C *社区成员使用基于定制列表驱动新项目的建议:

如上所述,我们相信CQL3对于Cassandra而言是一个比节俭API更简单,整体更好的API。因此,新的项目/应用鼓励使用CQL3

- source

而且CQL的表现非常迅速地变得越来越好。下面是一些过时的benchmarks.
UPDATE

因为答案是写一个maven central repository是为驾驶者创造所以现在使用它只需添加依赖到Maven:

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

我曾亲自使用Hector,Astyanax,Pelops,流利的Cassandra,Datastax的Driver和Pycassa,在使用了这么多API之后,我终于意识到Astyanax最适合我(它是我个人的考虑)。

特征i的astyanax发现了区分它从他人在联赛是

  • 易于使用的API
  • 复合柱支撑
  • 连接池
  • 延迟
  • 文档的
  • 更新
+8

Hector和datastax的驱动程序支持组合列(不知道其他人),我会说CQL比Astyanax更易于使用。同样节俭的是,CQL3应该用于新项目。 –

+2

嗯,我知道队友,其实我的考虑是在易于访问。是的CQL始终是一个更容易的选择,并且仍然如此(众所周知的事实是RDBMS背景),我可以保证,即使最大百分比的Astyanax用户使用他们的API中的CQL语句。 – abhi

+9

+1为Astyanax。 CQL并不容易 - 它只能成为:你可以简单地编写未执行的查询并且遇到麻烦,因为它使你成为关系型数据库,并且不会迫使你真正理解nosql存储的语义。 –

6

我已经使用Astyanax。它具有良好的文档记录并且易于使用,前提是编写5倍以上的代码比CQL没有问题。

现在我正在使用CQL,因为我一起工作的人没有完全掌握Astyanax代码 - 为什么他们必须为列名编写类。我认为如果你不使用Astyanax或Hector,你将永远无法理解Cassandra的内部结构。

4

你一定要用新的DataStax Java Driver和Cassandra 1.2来开始一个新的项目。这位车手刚刚参加了GA赛事,在开发新项目时,车手和Cassandra 1.2都将在未来几个月内变得更加稳定。

1

我同意Zanson/Valchkou。 DataStax Java Driver是未来。使用SQL运行Cassandra非常方便。同时,我也推荐CassandraExecutor,一个简单的包装DataStax Java Driver。与Java驱动程序相比,CassandraExecutor具有以下功能:

  • SQL /实体(同步/异步)操作(CRUD)的一致/集成/简明API。
  • DataSet,它支持不同/合并/排序/ GROUPBY /加盟/联盟/ unionAll /除/相交/ PAGINATE /过滤/计数/ 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的开发者)

相关问题