我想使用 Hector 存储双精度值(作为列名)。据我了解,我必须将 LONGTYPE 比较器与 DoubleSerializer 结合使用。我创建了一个 columnFamily,其中 ComparatorType.LONGTYPE 作为比较器,ComparatorType.UTF8TYPE 作为验证器。我将数据插入到我的列族中,如下所示:
Mutator<String> m = HFactory.createMutator(_keyspace, _ss);
m.addInsertion(rowKey, cf, HFactory.createColumn(colKey, "", _ds, _ss));
其中 rowKey 是 String,colKey 是 double,_ds 是 DoubleSerializer,_ss 是 StringSerializer。一切似乎都适用于积极的双重价值。但是,当我想使用负开始和/或结束参数进行范围查询时,事情变得很奇怪。这是我用来查询的代码:
SliceQuery<String, Double, String> q =
HFactory.createSliceQuery(ks, _ss, _ds, _ss);
q.setRange(START, FINISH., false, 500);
当 START 和 FINISH 为正时,一切正常。
当 START 为负而 FINISH 为正时,它将返回正确的正值,但仅返回那些实际上小于 START 的负值。
当两者都是负数并且 START 更小(应该是!?)然后 FINISH,它会抛出一个
InvalidRequestException(why:range finish must come after start in the order of traversal).
当两者都是负数,但 START 大于 FINISH(即负数较小)时,它将返回正确的结果,但顺序错误(负数最小,即最大,在前)。
任何人都可以对此发表评论吗?我做错了什么还是赫克托某处可能有错误?
编辑:不幸的是,DoubleType 已在以前版本的 hector 中删除。我忘了提到我使用的版本是 1.1-0。