【问题标题】:Hector API SliceQuery versus ColumnQuery performanceHector API SliceQuery 与 ColumnQuery 性能
【发布时间】:2012-09-22 12:48:02
【问题描述】:

我正在编写一个使用 Hector 访问 Cassandra 数据库的应用程序。在某些情况下,我只需要查询一列,而在某些情况下,我需要一次查询多列。编写一个采用列名数组并使用 SliceQuery 返回列列表的方法在代码方面是最简单的,但我想知道与使用 ColumnQuery 相比,将 SliceQuery 用于一列是否存在明显的缺点。

简而言之,对于一列使用 ColumnQuery 而不是 SliceQuery 是否有足够的(或任何)性能优势,值得额外的代码单独处理一列的情况?

【问题讨论】:

    标签: performance cassandra hector


    【解决方案1】:

    通过查看 Hector 的代码,使用 ColumnQuery (ThriftColumnQuery.java) 和 SliceQuery (ThriftSliceQuery.java) 之间的区别在于发送不同的 thrift 命令 - “get”或“get_slice”(分别)。

    我没有找到关于 Cassandra 的服务器如何实现这些操作的确切文档,但我快速浏览了 Cassandra 的源代码,在检查了 CassandraServer.java 之后,我得到的印象是在查询单个列时,“get”操作更多的是为了客户的方便而不是为了更好的性能:

    • 对于“get”请求,会创建并执行 SliceByNamesReadCommand 实例。
    • 对于“get_slice”请求(假设您使用的是 Hector 的 setColumnNames 方法而不是 setRange),将为每个想要的列创建一个 SliceByNamesReadCommand 实例,然后执行(该行只读取一次不过)。

    最重要的是,据我所知,创建一些用于处理多列的集合的(可忽略不计的)开销并不多。 但是,如果您仍然担心,我相信在您的 DAO 中使用 Hector 时,以不同方式处理这两种情况应该不会太难。

    希望我能提供帮助。

    【讨论】:

      猜你喜欢
      • 2013-06-08
      • 2011-12-03
      • 2012-07-20
      • 2014-08-03
      • 2011-10-01
      • 2011-11-16
      • 2012-06-01
      • 2011-12-23
      • 1970-01-01
      相关资源
      最近更新 更多