【问题标题】:Differences betweeen Hector Cassandra and JDBCHector Cassandra 和 JDBC 的区别
【发布时间】:2013-09-07 01:40:07
【问题描述】:

我目前正在启动一个使用 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)之间的更多差异,我将不胜感激。

提前致谢!

【问题讨论】:

    标签: cassandra hector


    【解决方案1】:

    官方 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 的可行替代方案。

    【讨论】:

      【解决方案2】:

      @摩尔

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

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

      【讨论】:

      • 对不起,我没有解释清楚。我正在与其他人几年前已经开始的项目合作。从项目的当前状态开始,我必须继续它。然后,它是如何使用 Hector Cassandra 开发的,我必须继续使用这项技术。所以,问题是另一方面,这个项目使用 JDBC 来访问 Cassandra,而不是使用 Hector Cassandra 进行访问。然后,我的疑问是,每种技术(Hector 或 Cassandra 的 JDBC)必须用于什么?
      • 哇!我不知道 Achilles 现在可以通过 Java 驱动程序工作。我会更新我的答案:)
      【解决方案3】:

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

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

      【讨论】:

      • 感谢您的回答。当我说 Hector 不使用 CQL 时,我指的是它不像用于 JDBC 那样用于 Hector。在 JDBC 中你必须这样做: stIntruction.executeUpdate("CREATE COLUMFAMILY ....");用于访问数据库。但是在 Hector 中,您调用了一个在内部执行 CQL 代码的函数。我说的对吗?
      • 我只能使用 JDBC Cassandra(具体来说:code.google.com/a/apache-extras.org/p/cassandra-jdbc)或 Hector Cassandra。无论如何,我会在未来的项目中考虑到它。谢谢!
      • @mol 我编辑了答案以试图澄清。如果这回答了您的问题,请接受并投票赞成答案。这就是stackoverflow的方式。
      【解决方案4】:

      既然要开始一个新项目,最好从 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%,因为它使用二进制协议。

      【讨论】:

        猜你喜欢
        • 2014-08-03
        • 2015-06-03
        • 1970-01-01
        • 2015-05-06
        • 1970-01-01
        • 2012-08-31
        • 2011-11-12
        • 2011-10-17
        • 2012-03-12
        相关资源
        最近更新 更多