5

我目前正在启动一个使用 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

4 回答 4

11

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

新的功能

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

因此,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 驱动程序由于其异步特性而明显优于其他客户端。

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

编辑:当我写这篇文章时,我不知道另一个答案中提到的 Achilles ( https://github.com/doanduyhai/Achilles ) 具有通过 Java 驱动程序工作的 CQL 实现。出于同样的完整性,我必须说,基于 CQL 的 Achilles 的 DAO 可能(或可能有一天成为)通过 Java 驱动程序替代纯 CQL 的可行方案。

于 2013-09-04T11:17:51.497 回答
4

@摩尔

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

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

于 2013-09-03T19:44:27.173 回答
2

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

Cassandra 中的 CQL 是一种通过 Cassandra API 工作的类似 SQL 的语言。因此,它在使用 Cassandra 时没有提供比 API 更多的功能,但有时确实使它更易于使用。如果您正在考虑使用 Hector,我还会查看Astyanax,它是对 Cassandra 的高级 Java API 的更新。

于 2013-09-03T18:13:59.167 回答
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%,因为它使用二进制协议。

于 2013-09-04T12:20:16.413 回答