Apache Cassandra的高级Java客户端选择

有四个高级API可以访问Cassandra,我没有时间尝试它们。所以我希望找到一个可以帮助我选择合适人选的人。 我会写下我对他们的发现: DataNucleus将-卡桑德拉 - 插件 优点: 支持JPA1,JPA2,JDO1 - JDO3 - 我在评论中看到,JDO比使用JPA的Hibernate更好地扩展 kundera中提到的所有专业人士? 缺点: 到目前为止对JDO没有任何考验(当然只与我有关;) 找不到文档! 昆德拉 优点: 具有所有优点的JPA 1.0注释(标准符合,没有样板代码,......) 承诺在不久的将来跟随功能:JPA听众,@ Preersers @PostPersist等 - 关系,@ OneToMany,@ ManyToMany等 - 交易支持,@ Transactional 缺点: 插件的早期开发阶段? 错误? 没有可能解决JDO / JPA框架中的问题? s7 pelops 优点: 纯java api - >更好地控制持久性? 缺点: 纯java api - >样板代码 hector 0.7 优点: Maven化 spring integration - >依赖注入 纯java api - >更好地控制持久性? jmx监控? 管理节点似乎很容易和灵活 缺点: 纯java api(无注释) - >锅炉板代码 结论到目前为止 由于我对RDMS,Hibernate,JPA,Spring以及对EJB不再那么新闻充满信心,我的第一印象是,去kundera本来是正确的选择。但在阅读了一些有关JPO,DataNucleus的帖子后,我不再确定了。对于DataNucleus,学习曲线应该是陡峭的(对于经验丰富的JPA开发人员?),我不确定,我是否应该去实现它。 我主要担心的是插件的状态。还有JDO和Datanucleus-Cassandra-Plugin的论坛支持/帮助,因为据我所知,它并没有广泛传播。 有人在那里,谁有经验,有一些framworks已经可以给我一个暗示?也许混合策略也是有意义的。如果(如果存在的话)JDO不灵活/足够/不足以满足我的需求,那么回归到一个更容易的pelops或hector的API?这可能吗?是否有类似于JPA的方法来获取SQL连接和获取/放置数据? 在阅读了一下之后,我发现了以下附加信息:   Datanucleus-Cassandra-Plugin基于pelops,也可以访问以获得更大的灵活性,更高的性能(?),这应该用于具有大量数据的列族,JDO / JPA访问应仅用于“管理“数据,性能不是那么重要,数据量不是很大。 对于hector或pelops来说,这仍然是个问题。 为它的后来发布Datanucleus-Cassandra-Plugin可扩展性,或者 hector for it对节点hanldling的支持更充分。     
已邀请:
我尝试了大多数这些解决方案,并找到最好的hector。即使你有一些问题,你总能找到在freenode的#cassandra中编写hector的人。就我而言,代码更加成熟。在cassandra客户端中,最关键的部分是连接池管理(因为所有客户端通过thrift执行大多数相同的操作,但连接池是使高级客户端滚动的原因)。在那种情况下,我会投票给hector,因为我现在在生产中使用它超过一年没有明显的问题(我发现并发送一封电子邮件后立即修复了1个重新连接问题)。 我仍在使用cassandra 0.6。     
datanucleus插件的作者Todd Nine现在正致力于Hector的下一代JPA支持。     
Hector客户端是我们选择的API,因为它具有以下功能: 连接池(共享与节点的连接时的巨大性能提升) 使用大多数所有内容的接口完成自定义配 自动发现主机 自定义负载平衡策略定义(LeastActiveBalancingPolicy或RoundRobinBalancingPolicy或实现LoadBalancingPolicy) Thrift API顶部的轻量级适配器。 很好的例子:见hector-examples 内置JMX支持。 赫克托耳的下方: 文档还不错,但Java Docs缺乏一点。这可能很容易成为用户社区的Git fork / pull请求。 ORM的支持有点受限,但在我们的案例中并不紧急。我无法让一些一对多关联轻松工作,加上缺乏描述什么类型的Cassandra模型(关联集合的超级列或列族)。还缺少Java示例(也许有一些,如果你找到一些请发布)。 此外,我尝试使用kundera几乎没有成功。使用或尝试的示例不多,很少有论坛支持。它似乎由一个人维护,这使得选择这样的工具变得更加困难。它似乎基于SVN活动而转移到使用Hadoop或支持它。     
昆德拉2.0.4发布。 此版本的主要变化: 跨数据存储持久性(很容易通过nosql缩小现有的mysql应用程序) 支持关系数据库(例如Mysql等) 用基于lucene的索引替换solandra。 为双向协会增加了支持。 性能改进修复。     
我也会提议Astyanax,我正在努力,我很开心。只有文档不是很好。   Astyanax API      Astyanax实现了一个流畅的API,可以指导调用者缩小或缩小   通过一组定义良好的接口自定义查询。我们也是   包括一些将有效执行和近距离执行的食谱   到尽可能低级别的RPC层。客户也很沉重   使用泛型和重载几乎消除了需要   指定序列化程序。   API的一些主要功能包括:         键和列类型在ColumnFamily类中定义   无需指定序列化程序。   同一键空间中的多列族键类型。基于注释的复合列名称。   自动分页。   可识别令牌的并行化查询。   每个操作的可配置一致性级别。   每个操作的可配置重试策略。   将操作固定到特定节点。   使用Futures进行单次超时的异步操作。   基于简单注释的对象映射。   操作结果返回主机,延迟,尝试计数。   跟踪器接口记录自定义事件以确定操作失败和成功。   优化批量突变。   完全隐藏调用者的时钟,但提供钩子来定制它。   简单的CQL支持。   RangeBuilders简化构造简单和复合列范围。   复合构建器,以简化创建复合列名称。         食谱一些常见用例的食谱:         CSV导入程序。   JSON导出器将任何查询结果转换为广泛的JSON   自定义。   并行反向索引搜索。   关键唯一约束验证。    http://techblog.netflix.com/2012/01/announcing-astyanax.html     
我建议你试试Kundera-2.0.1。它自成立以来发生了重大变化,我看到许多新功能被添加并且错误被修复。目前它支持JPA 1.0和Cassandra 0.7.6,但他们计划很快增加对Cassandra 0.8和JPA 2.0的支持。这里有一个很好的例子:https://github.com/impetus-opensource/Kundera/wiki/Getting-Started-in-5-minutes     
您可以尝试Achilles,我开发的新实体管理器,支持所有CQL3功能。 实体映射 JPA风格的操作 加入的支持有限 使用复合主键映射群集实体 查询(本机,键入,切片) 支持柜台 支持一致性级别 TTL&时间戳 JUnit 4规则启动嵌入式Cassandra服务器进行测试 还有更多...... 有两种实现方式:Thrift& CQL Thrift版本依赖于引擎盖下的Hector。 CQL版本从Datastax为所有操作提取全新的Java Driver Core 这里快速参考     

要回复问题请先登录注册