Hector API SliceQuery与ColumnQuery性能

时间:2012-10-01 16:22:22

标签: performance cassandra hector

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

希望我能帮到你。