Apache Cassandra 的高级 Java 客户端选择 [关闭]

Posted

技术标签:

【中文标题】Apache Cassandra 的高级 Java 客户端选择 [关闭]【英文标题】:High Level Java Client selection for Apache Cassandra [closed] 【发布时间】:2011-07-11 01:37:15 【问题描述】:

有四个高级 API 可以访问 Cassandra,我没有时间全部尝试。所以我希望能找到可以帮助我选择合适的人。

我会试着写下我对他们的发现:

Datanucleus-Cassandra-插件

优点:

支持 JPA1、JPA2、JDO1 - JDO3 - 正如我在评论中看到的那样,JDO 的扩展性优于使用 JPA 的 Hibernate kundera 中提到的所有专业人士?

缺点:

到目前为止没有使用 JDO 的经验(当然只与我相关;) 找不到文档!

昆德拉

优点:

JPA 1.0 注释具有所有优点(符合标准、无样板代码……) 承诺在不久的将来提供以下功能:JPA 侦听器、@PrePersist @PostPersist 等 - 关系、@OneToMany、@ManyToMany 等 - 事务支持、@Transactional

缺点:

插件的早期开发阶段? 错误? 无法修复 JDO/JPA 框架中的问题?

s7 佩洛普

优点:

纯 java api --> 更好地控制持久性?

缺点:

纯 java api --> 样板代码

赫克托0.7

优点:

成熟的 spring 集成 --> 依赖注入 纯 java api --> 更好地控制持久性? jmx 监控? 节点管理似乎既简单又灵活

缺点:

纯java api(无注释)-->样板代码

到目前为止的结论

由于我对 RDMS、Hibernate、JPA、Spring 很有信心,而对 EJB 的更新并不那么先进,所以我的第一印象是,选择 kundera 将是正确的选择。但是在阅读了一些关于 JPO、DataNucleus 的帖子后,我不再确定了。由于 DataNucleus 的学习曲线应该很陡峭(对于经验丰富的 JPA 开发人员来说也是如此?),我不确定是否应该这样做。

我主要关心的是插件的状态。还有对 JDO 和 Datanucleus-Cassandra-Plugin 的论坛支持/帮助,因为据我所知,它的传播范围并不广。

有没有人有经验,已经使用了一些框架并且可以给我一个提示?也许混合策略也有意义。在某些情况下(如果存在)JDO 不够灵活/不够/无法满足我的需求,要退回到 pelops 或 hector 的更简单的 API 之一?这可能吗?是否有类似 JPA 的方法来获取 sql 连接并获取/放置数据?


阅读了一下之后,我发现了以下附加信息:

Datanucleus-Cassandra-Plugin 是基于 pelops 的,它也可以访问以获得更大的灵活性,更高的性能(?),应该用于具有大量数据的列族,JDO/JPA 访问应该只用于“管理”数据,其中性能不那么重要,数据量也不是很大。

这仍然让问题从 hector 或 pelops 开始。

因为它是后来的 Datanucleus-Cassandra-Plugin 可扩展性,或者 hector,因为它对节点处理的支持更充分。

【问题讨论】:

坚持使用 Hector,您不会失望(pelops 看起来也很有希望,不过还没有时间自己测试) Hector....与 Cassandra 一起工作就像一个魅力....或者,使用 Avro。 您对 DN Cassandra 插件说“找不到文档”,但文档是 JDO 或 JPA,因此请参阅 DataNucleus 文档 (v2.2)。 Todd Nine 的插件和 Pedro Gomez 的插件应该针对 DN 2.2 构建/工作(您使用的是哪一个?我认为 Todd 的更完整)。 Cassandra 的唯一特定位是您传入的 URL(以及支持哪些功能)。 感谢您的提示。首先,我会坚持使用 hector,然后继续使用 DataNucleus,当我更好地理解时,我在做什么...... DataNucleus JDO/JPA 从 2 年前(2013 年)开始提供他们自己的 Cassandra 插件。它不是基于 pelops,而是使用较新的 CQL,因此跟踪最近的 Cassandra 开发 【参考方案1】:

我尝试了大多数这些解决方案,并发现赫克托是最好的。即使您遇到问题,您也可以随时联系在 freenode 的 #cassandra 中编写 hector 的人。就我而言,代码更成熟。在 cassandra 客户端中,最关键的部分是连接池管理(因为所有客户端都通过 thrift 执行大部分相同的操作,但连接池是高级客户端滚动的原因)。在这种情况下,我会投票给赫克托,因为我在生产中使用它已经一年多了,没有明显的问题(我一发现并发送了一封电子邮件就解决了一个重新连接问题)。

我仍在使用 cassandra 0.6。

【讨论】:

感谢您的回答。真的看起来我会走这条路。示例应用程序也是基于 hector 构建的。此外,承诺支持使用 JDO 和 JPA 的 DataNucleus 听起来不错。 我也喜欢 hector,因为 cassandra-unit 已经在使用它,而且我可以更轻松地创建单元测试,这些测试实际上与 cassandra 本身而不是模拟一起工作。【参考方案2】:

datanucleus 插件的作者 Todd Nine 现在正在研究 Hector 中的下一代 JPA 支持。

【讨论】:

这听起来不错。实际上,我可能会选择稍后走 JPA、JDO 路径的可能性。但是知道,这在未来也可以通过 hector 实现,最好选择 hector,因为它有更好的节点管理支持。感谢您的提示!【参考方案3】:

Hector 客户端是我们选择的 API,因为它具有以下特性:

连接池(与节点共享连接时性能大幅提升) 使用界面完成几乎所有内容的自定义配置。 自动发现主机 自定义负载平衡策略定义(LeastActiveBalancingPolicy 或 RoundRobinBalancingPolicy 或实施 LoadBalancingPolicy) Thrift API 之上的轻量级适配器。 很好的例子:见hector-examples 内置 JMX 支持。

赫克托的缺点:

文档还不错,但是 Java 文档有点欠缺。这很容易成为用户社区提出的 Git 分叉/拉取请求。 ORM 支持有点有限,但在我们的案例中并不急需使用。我无法让一些一对多的关联轻松工作,而且缺乏描述什么类型的 Cassandra 模型(关联集合的超级列或列族)。也缺少 Java 示例(可能有一些,如果找到请发布)。

另外,我尝试使用 kundera,但收效甚微。使用或尝试的示例不多,论坛支持很少。它似乎由一个人维护,这使得选择这样的工具变得更加困难。它的出现是基于它正在迁移到使用 Hadoop 的 SVN 活动,或者也支持它。

【讨论】:

【参考方案4】:

昆德拉 2.0.4 发布。

此版本的主要变化:

跨数据存储持久性(通过 nosql 轻松迁移现有 mysql 应用) 支持关系数据库(例如 Mysql 等) 将 solandra 替换为基于 lucene 的索引。 添加了对双向关联的支持。 性能改进修复。

【讨论】:

【参考方案5】:

我也建议使用 Astyanax,我正在使用它,我很高兴。只有文档不是很好。

Astyanax API

Astyanax 实现了一个流畅的 API,它可以引导调用者缩小或 通过一组定义明确的接口自定义查询。我们也 包括一些将有效且尽可能接近地执行的配方 尽可能低的 RPC 层。客户也使重 使用泛型和重载几乎消除了 指定序列化程序。 API 的一些主要功能包括:

键和列类型在 ColumnFamily 类中定义,该类 消除了指定序列化程序的需要。 同一键空间中的多个列族键类型。基于注释的复合列名称。 自动分页。 可识别令牌的并行化查询。 每个操作的可配置一致性级别。 每个操作的可配置重试策略。 将操作固定到特定节点。 使用 Futures 进行一次超时的异步操作。 基于简单注释的对象映射。 操作结果返回主机、延迟、尝试计数。 用于记录操作失败和成功的自定义事件的跟踪器接口。 优化批量突变。 完全隐藏调用者的时钟,但提供挂钩来自定义它。 简单的 CQL 支持。 RangeBuilders 可简化简单列范围和复合列范围的构造。 复合构建器可简化复合列名称的创建。

食谱一些常见用例的食谱:

CSV 导入器。 JSON 导出器可将任何查询结果转换为具有广泛范围的 JSON 定制。 并行反向索引搜索。 键唯一约束验证。

http://techblog.netflix.com/2012/01/announcing-astyanax.html

【讨论】:

【参考方案6】:

我建议你试试 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

【讨论】:

【参考方案7】:

您可以尝试Achilles,这是我开发的支持所有 CQL3 功能的新实体管理器。

实体映射 JPA 风格的操作 对加入的有限支持 使用复合主键映射集群实体 查询(原生、类型化、切片) 支持计数器 支持一致性级别 TTL 和时间戳

JUnit 4 规则启动嵌入式 Cassandra 服务器进行测试

还有更多...

有 2 种实现方式:ThriftCQL

Thrift 版本在底层依赖于 Hector

CQL 版本从 Datastax 中提取全新的 Java Driver Core 用于所有操作

快速参考here

【讨论】:

以上是关于Apache Cassandra 的高级 Java 客户端选择 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Apache Cassandra安装错误Windows 10:hotspot_compiler

找不到 Spark 和 Cassandra Java 应用程序异常提供程序 org.apache.hadoop.fs.s3.S3FileSystem

带有 Cassandra 的 Apache Spark 1.5:类转换异常

cassandra安装

未找到请求操作的编解码器:[map<varchar, int> <-> java.util.Map];发布 Apache Cassandra

Cassandra无法创建Java虚拟机