Hector Cassandra与JDBC之间的差异

时间:2013-09-03 18:04:59

标签: cassandra hector

我目前正在开始一个使用Cassandra Apache的项目。所以我很有兴趣从Java访问我的数据库cassandra。为此,我正在使用Hector Cassandra。但是,我对通过Hector或JDBC Cassandra(特别是:https://code.google.com/a/apache-extras.org/p/cassandra-jdbc/)的访问之间的差异有一些疑问。

我相信以下(虽然我不确定我是否正确):

  • 两者之间的一个区别可能是不同级别的API(我认为Hector Cassandra是一个比JDBC Cassandra更高级的API)?

  • JDBC中的
  • Cassandra使用CQL访问/修改数据库,而Hector Cassandra不使用CQL(仅使用为此提供的方法)。

如果有人可以帮助我并告诉我前一行中是对还是错,并且两者之间存在更多差异(Hector和JDBC Cassandra),我将感激不尽。

提前感谢!

4 个答案:

答案 0 :(得分:11)

官方Cassandra Java驱动程序(https://github.com/datastax/java-driver)可能是新项目的最佳选择(恕我直言,唯一),原因如下:

新功能

所有其他Cassandra客户端(Hector,Astyanax等)都基于传统的Thrift RPC协议。 RPC“每个请求一个响应”模型具有严重的限制,例如,它不允许在单个连接或流式大型ResultSet中同时处理多个请求。

因此,DataStax开发了一种没有RPC限制的新协议。 Thrift API不会获得新功能,它只是为了向后兼容而保留。相比之下,Java Driver正在积极开发,以结合Cassandra 2.0的新功能,如条件更新,批处理预处理语句等。新功能概述如下:http://www.datastax.com/dev/blog/cql-in-cassandra-2-0

便利

在我们公司的Cassandra早期(0.7),我们使用了内部的低级Thrift客户端。后来我们在各种项目中使用了Hector,Pelops和Astyanax。我可以说基于Java Driver的客户端看起来最简单,最干净。

效果

我们对Cassandra Java Driver与其他客户端进行了一些性能测试。在大多数情况下,性能大致相同。但是,在某些情况下,Cassandra Java Driver由于其异步性质而明显优于其他客户端。

顺便说一句,有几个相关的问题,答案很好:

编辑:当我写这篇文章时,我不知道Achilles(https://github.com/doanduyhai/Achilles)在另一个答案中提到了CQL实现,它可以通过Java Driver运行。为了完整性,我必须说Achilles在CQL之上的DAO可能(或者可能成为一天)通过Java Driver可以替代普通的CQL。

答案 1 :(得分:4)

@mol

如果你要开始一个新项目,为什么要限制Hector和cassandra-jdbc?

还有许多其他有趣的选择:

答案 2 :(得分:2)

Hector确实是一个更高级别的API。在内部,它将使用Cassandra的Thrift API来执行其功能。它不会将它们转换为等效的CQL调用。但它的API也是provides access到CQL。在这种情况下,它会将CQL(通过Thrift)传递给Cassandra的CQL API。

Cassandra中的CQL是一种类似SQL的语言,可以通过Cassandra API工作。因此,它没有提供使用Cassandra的任何额外功能而不是API,但确实使其有时更容易使用。如果您正在考虑使用Hector,我还会查看Astyanax这是对Cassandra的高级Java API的新版本。

答案 3 :(得分:1)

由于您正在开始一个新项目,因此最好从CQL开始作为Java本机驱动程序:

http://www.datastax.com/documentation/developer/java-driver/1.0/webhelp/index.html#common/drivers/introduction/introArchOverview_c.html

根据DataStax,它比Thrift API快10-15%,因为它使用二进制协议。