Cassandra Client Java API

时间:2013-04-13 01:25:25

标签: java cassandra hector astyanax pelops

我最近开始使用Cassandra数据库。现在我正在评估我们应该推进哪个Cassandra client

我在stackoverflow上看过关于哪个客户端用于Cassandra的各种帖子,但没有一个有非常确定的答案。

我的团队已要求我对此进行一些研究,并为Java中的每个pros and cons提出一定的Cassandra Client API’s

正如我所提到的,我最近参与了Cassandra,所以没有太多想法为什么某些人选择Pelops client以及为什么某些人选择Astyanax和其他一些客户。

我知道每个Cassandra客户的简要介绍,我的意思是我能够完成这项工作并开始阅读和写入Cassandra数据库。

以下是我目前所掌握的信息。

CASSANDRA APIS

  • Hector(生产就绪)
    最稳定的Java API,为黄金时段做好准备。

  • Astyanax(The Up and Comer)
    来自Netflix的干净Java API。它没有Hector广泛使用,但它是坚实的。

  • Kundera(NoSQL ORM)
    符合JPA标准,当您想通过对象与Cassandra进行交互时,这很方便 这有点限制了你,因为你将无法拥有动态数量 列/名称等。但它确实允许您移植ORM或集中存储 加入Cassandra以获得更多传统用途。

  • 贝洛布思
    我只是简单地使用过Pelops。这是一个直接的API,但似乎没有 有它背后的动力。

  • PlayORM(没有约束的ORM?)
    我刚刚听说过这个。看起来它正试图解决阻抗问题 通过引入JQL,传统的基于JPA的ORM和NoSQL之间不匹配。它看起来 有前途的。

  • 节俭(避免我!)
    这是“低级”API。

以下是我们决定Cassandra Client -

的优先事项
  • 首要任务是:低延迟开销,Asynch API以及生产环境的可靠性/稳定性 (例如,包含客户端的DAL中可以使用的用户友好的API)。
  • 连接池和分区感知是其他一些很好的功能。
  • 能够检测到已添加的任何新节点。
  • 良好的支持(如下面的院长指出)

有人能提出一些想法吗?此外,每个Cassandra Client以及哪个客户可以满足我的要求的任何利弊也将有很大的帮助。

我相信,主要是我将围绕Astyanax client or New Datastax client that uses Binary protocol旋转我估计到目前为止我的研究基础。但是没有某些信息支持我的研究并将其提交给我的团队。

Astyanax客户端和New Datastax客户端(使用新的二进制协议)之间的任何比较都会有很大的帮助。

在我的研究中对我有很大帮助,并且会从过去使用过不同客户的不同人那里获得很多相关知识。

5 个答案:

答案 0 :(得分:23)

Thrift正变得越来越成为传统的API:

  

首先,您应该知道Thrift API不会获得新功能;它是为了向后兼容,而不是推荐用于新项目。
   - the paul

所以我会避免使用基于Thrift的API(只保留thrift以保持向后兼容性)。

说如果你确实需要使用基于节俭的API,我会选择Astyanax。 Astyanax非常易于使用(与其他节俭API相比,但我个人的经验是Datastax的驱动程序更容易)。

因此,您应该查看Datastax's API(and GitHub repo)?我不确定是否有任何已编译的API版本可供下载,但您可以使用Maven轻松构建它。此外,如果您查看GitHub repo的提交日志,它会经常进行更新。

驱动程序专门使用CQL3并且是异步的,但要注意Cassandra 1.2是最早支持的版本。

效果
Astyanax是基于节俭的,Datastax的驱动器是二进制协议。以下是我在thrift和CQL之间可以找到的最新benchmarks(注意这些肯定是过时的)。但公平地说,这些基准测试中显示的性能差异很小。

Asynch支持
Datastax的 asynch 支持比Astyanax(Netflix tried implementing明确优势,但决定不支持)。

文档
我不能反对Netflix's wiki。文档非常好,并且经常更新。他们的wiki包含代码示例,如果需要查看代码,可以在源代码中找到测试。我很难找到Datastax驱动程序的任何文档,但是在GitHub存储库中提供了测试,因此这是一个起点。

另外看一下this answer(好吧......不管怎么说)。它研究了Thrift和CQL的一些优点/缺点。

答案 1 :(得分:8)

我会为Cassandra http://www.datastax.com推荐Datastax java驱动程序。

对于JPA之类的支持,请尝试我的映射工具。 http://valchkou.com/cassandra-driver-mapping.html

注释驱动 没有映射文件,没有脚本,没有配置文件。 不需要DDL脚本。 模式自动与实体定义同步。

使用示例:

   Entity entity = new Entity();
   mappingSession.save(entity);
   entity = mappingSession.get(Entity.class, id);
   mappingSession.delete(entity); 

可在maven central

上找到
   <dependency>
      <groupId>com.valchkou.datastax</groupId>
      <artifactId>cassandra-driver-mapping</artifactId>          
    </dependency>

答案 2 :(得分:3)

我也会增加不错的支持。我们一直在堆栈溢出时发布playORM的答案;)。它也即将开始支持mongodb(工作已接近完成),因此任何客户都可以使用mongodb或cassandra。它有自己的查询语言,这样端口工作得很好。当真正需要速度时,你总是可以访问原始的astyanax界面。

另外,你关于asynch ... thrift的说明以前不支持asynch所以没有客户端做了,因为他们生成了thrift代码。由于这已经改变,我不知道有一个客户端已经添加了asynch内容。

我知道hbase有一个异步客户端。无论如何,只是想我会增加2美分,以防它有点帮助。

编辑:我最近在cassandra-thrift生成的源代码中使用send和recv()方法进行异步开发并不是一个非常好的API,但是你不知道何时调用recv方法。 cassandra用户列表上的Aaron morton有一个关于你如何真正做到这一点的博客但它根本不干净......必须从节俭深处抓住选择器并做一些事情让你知道何时调用recv方法.. 。讨厌的东西。

后, 迪安

答案 3 :(得分:2)

我直接使用了Hector,Astyanax和Thrift。我还使用了Python客户端PyCassa。

我发现重要且与众不同的功能是:

  • 易于使用API​​
  • 复合列支持
  • 连接池
  • 延迟
  • 文档

其中一个主要问题是使类型更正确。你希望能够传入long,Strings,byte []等.Hector和Astyanax都通过使用Serializer对象来解决这个问题。在Astyanax中,您可以在链中指定它们,因此您必须更少地指定它们。在Hector中,如果更改模式,语法通常非常笨重且难以适应。

由于Python具有动态类型,因此在PyCassa中处理它更容易。因为它不是你的选择,所以我不会说太多,但我发现它最容易使用(到目前为止)但也很慢。

Hector中的复合列支持非常混乱。 Astyanax有注释可以大大简化这一点。

据我所知,Hector和Astyanax的连接池是相同的。两者都将避免被击落的主机并发现添加到环中的新主机。这两个特性对可靠性和可维护性至关重要。 Pelops似乎有这些功能,但我从未尝试过。

Astyanax和Hector之间的关键区别在于延迟优化。 Astyanax能够将读写请求路由到副本节点,从而避免额外的网络跳跃。这可以将延迟减少几毫秒。

最后看,Astyanax的文档很差,但现在似乎有了很大改进。

我今天能看到的赫克托耳的唯一优势是它使用得更广泛,所以可能不那么多了。但Astyanax有更好的功能集。

答案 4 :(得分:1)

我和Valchkou有类似的建议。 DataStax java CQL驱动,非常好。我尝试过astyanax,kundera和buffalosw的游戏。 Astyanax水平很低,有些复杂。 Kundara和playorm是nosql数据库的通用ORM,设置和入门都很复杂。

Datastax apis与JDBC驱动程序非常相似,您必须在DAO中嵌入CQL语句并编写几行代码来加载和保存实体。为了解决这个问题,我编写了一个名为cassandra-jom的java对象映射器,它围绕datastax cql驱动程序构建。 Cassandra-jom注释与JPA / Hibernate注释非常相似,甚至可以从对象模型创建/更新列族模式。它易于使用且可靠,并在我的其他实时Web应用程序中使用。在github页面上查看。

https://github.com/w3cloud/cassandra-jom