【问题标题】:New Cassandra project - Astyanax or Java Driver?新的 Cassandra 项目 - Astyanax 还是 Java 驱动程序?
【发布时间】:2013-04-12 00:55:05
【问题描述】:

我正在使用 Cassandra 开始一个新项目(并计划使用最新的稳定 (1.2.x) 版本)。我尝试了几个不同的 Java 库,比如HectorAstyanax、Cassandra-jdbc...

其中,(简而言之)我的选择是 Astyanax。但后来我也找到并尝试了 DataStax 的 Java 驱动程序,它支持新的 CQL 二进制协议,如果你只使用 CQL,它会更干净。看来 1.0.0 GA 版本即将发布。

你会推荐哪一个?谢谢。

【问题讨论】:

  • +1 为 Astyanax!很棒的 api!

标签: java cassandra astyanax datastax-java-driver


【解决方案1】:

我同意 Zanson/Valchkou 的观点。 DataStax Java Driver 是未来。用 SQL 操作 Cassandra 非常方便。同时,我也推荐CassandraExecutor,一个简单的DataStax Java Driver 包装器。 CassandraExecutor 与 Java Driver 相比具有以下特点:

  • 使用 SQL/实体的(同步/异步)操作 (CRUD) 的一致/集成/简洁 API。
  • DataSet,支持distinct/merge/sort/groupBy/join/union/unionAll/except/intersect/paginate/filter/count/toJOSN/toXML/toCVS...

这是一个简单的 CRUD(创建/读取/更新/删除)示例:

Account account = createAccount();
// create
String sql_insert = NE.insert(ID, GUI, FIRST_NAME, LAST_NAME, LAST_UPDATE_TIME, CREATE_TIME).into(Account.class).sql();
cassandraExecutor.execute(sql_insert, account);

// read
String sql_selectByGUI = NE.select(ID, GUI, FIRST_NAME, LAST_NAME).from(Account._).where(L.eq(ID, L.QME)).sql();
Account dbAccount = cassandraExecutor.queryForEntity(Account.class, sql_selectByGUI, account);

// update
String sql_updateByLastName = NE.update(Account.class).set(FIRST_NAME).where(L.eq(ID, L.QME)).sql();

dbAccount.setFirstName("newFirstName");
cassandraExecutor.execute(sql_updateByLastName, dbAccount);

// delete
String sql_deleteByFirstName = NE.deleteFrom(Account.class).where(L.eq(ID, L.QME)).sql();
cassandraExecutor.execute(sql_deleteByFirstName, dbAccount);

(声明:我是CassandraExecutor的开发者)

【讨论】:

    【解决方案2】:

    我用过 Astyanax。只要您编写的代码比 CQL 多 5 倍,它就有很好的文档且易于使用。

    现在我正在使用 CQL,因为与我共事过的人还没有完全掌握 Astyanax 代码 - 为什么他们必须为列名编写类。我认为如果您不使用 Astyanax 或 Hector,您将永远无法正确理解 Cassandra 的内部结构。

    【讨论】:

      【解决方案3】:

      我建议您使用基于 cql3 的驱动程序。一些选择是支持异步连接的JDBC driver 甚至更好的Datastax's driver。您可能必须自己构建 datastax 的驱动程序,但这可以使用 maven 轻松完成。

      Thrift 不会在 Cassandra 中获得任何新功能,保留它是为了向后比较,并且大多数 C* 社区成员建议在新项目中使用基于 cql 的驱动程序:

      如上所述,我们认为对于 Cassandra,CQL3 是一个比 thrift API 更简单且整体更好的 API。因此,鼓励新项目/应用程序使用 CQL3

      -source

      CQL 的性能也正在迅速提高。这里有一些过时的benchmarks.
      更新

      由于编写了答案,因此为驱动程序创建了 maven central repository,因此现在要使用它只需将依赖项添加到 maven:

      <dependency>
          <groupId>com.datastax.cassandra</groupId>
          <artifactId>cassandra-driver-parent</artifactId>
          <version>1.0.0</version>
      </dependency>
      

      【讨论】:

        【解决方案4】:

        对于刚刚开始的新项目,您绝对应该使用新的 DataStax Java Driver 和 Cassandra 1.2。驱动程序刚刚进入 GA,随着您开发新项目,驱动程序和 Cassandra 1.2 只会在接下来的几个月内变得更加稳定。

        【讨论】:

          【解决方案5】:

          我个人使用过 Hector、Astyanax、Pelops、Fluent Cassandra、Datastax 的 Driver 和 Pycassa,在使用了这么多 API 之后,我终于意识到 Astyanax 最适合我(这是我个人的考虑)。

          我在 astyanax 中发现的区别于联盟其他人的特点是

          • API 的易用性
          • 复合列支持
          • 连接池
          • 延迟
          • 文档
          • 已更新

          【讨论】:

          • Hector 和 datastax 的驱动程序支持复合列(不确定其他列),我会说 CQL 比 Astyanax 更易于使用。 thrift 也即将淘汰,因此 CQL3 应该用于新项目。
          • 我知道伙计,实际上我的考虑是易于访问。是的,CQL 一直是一个更简单的选择,并且会一直如此(众所周知的事实是 RDBMS 背景),我可以保证,即使是最大百分比的 Astyanax 用户也使用他们 API 中的 CQL 语句。
          • +1 为 Astyanax。 CQL 并不容易 - 它只是接缝:您可以简单地编写未执行的查询并遇到麻烦,因为它使您成为关系数据库,并且不会强迫您真正理解 nosql 存储的语义。
          • @MaciejMiklas 你试过二进制驱动吗?您可以在 4 行中构建查询。
          猜你喜欢
          • 2020-12-21
          • 2016-08-04
          • 2020-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-17
          • 2018-02-15
          • 2013-08-18
          相关资源
          最近更新 更多