我正在编写一个使用Hector访问Cassandra数据库的应用程序。我有一些情况,我只需要查询一列,以及一些我需要一次查询多列的情况。编写一个采用一系列列名并使用SliceQuery返回列列表的方法在代码方面最简单,但我想知道与使用ColumnQuery相比,将SliceQuery用于一列是否存在明显的缺点。
简而言之,对于一列使用ColumnQuery而不是SliceQuery是否有足够的(或任何)性能优势,使得额外的代码值得分别处理单列案例?
答案 0 :(得分:2)
通过查看Hector的代码,使用ColumnQuery( ThriftColumnQuery.java )和SliceQuery( ThriftSliceQuery.java )之间的区别是发送的不同thrift命令 - “get”或“get_slice”(分别)。
我没有找到Cassandra服务器如何实现这些操作的确切文档,但我快速查看了Cassandra的来源,并在检查了 CassandraServer.java 之后得到的印象是“get”操作更方便客户使用,而不是查询单个列时的更好性能:
SliceByNamesReadCommand
实例。setColumnNames
方法而不是setRange
),会为每个所需列创建一个SliceByNamesReadCommand
实例,然后执行(该行只读一次)。最重要的是,据我所知,创建一些用于处理多列的集合的开销(可忽略不计)不多。 如果您仍然担心,我相信在您的DAO中包含Hector的使用时,处理这两种情况应该不会太难。
希望我能帮到你。