【问题标题】:High Level Java Client selection for Apache Cassandra [closed]Apache Cassandra 的高级 Java 客户端选择 [关闭]
【发布时间】: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 开发

标签: java jpa cassandra jdo datanucleus


【解决方案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

          【讨论】:

            猜你喜欢
            • 2015-04-06
            • 1970-01-01
            • 2015-06-21
            • 2014-07-30
            • 2018-08-16
            • 2012-03-31
            • 2010-10-18
            • 2019-05-23
            • 1970-01-01
            相关资源
            最近更新 更多