cassandra SliceQuery start和end参数使用注意事项

SliceQuery<String, String, Long> query = HFactory.createSliceQuery(cassandraService.getKeyspace(), StringSerializer.get(), StringSerializer.get(), LongSerializer.get());
query.setColumnFamily("your_cf_name");
query.setKey("your_rowkey");
ColumnSliceIterator<String, String, Long> iterator = new ColumnSliceIterator<String, String, Long>(query, "", "", false);

while (iterator.hasNext()) {
	HColumn<String, Long> element = iterator.next();
	String cfName = element.getName();
	String value = element.getValue();
	System.out.println(cfName + " " + element.getValue());
}

 

ColumnSliceIterator的四个参数:

  1. SliceQuery对象,它cf和rowkey信息
  2. cf 查询的start位置
  3. cf 查询的end位置
  4. 反序查询设置。这个参数非常有用,如果你的数据是按照时间顺序存储,反序查找可以快速获取最新数据。
测试数据(cfname value)
001_I 36121866
001_O 1001601781
002_I 37068144
002_O 962978185
003_I 35767262
003_O 889229008
004_I 32442817
004_O 823356694
005_I 34822166
005_O 792243001
006_I 29860696
006_O 756651507
007_I 30314166
007_O 709360466
008_I 29475122
008_O 677957355
009_I 29312435
009_O 641699077
010_I 27042011
010_O 599447449

 

测试一:正序查找模糊匹配

 查询条件:

start = "002", end="008", reversed=false(正序查找)

 

则查询结果为:

002_I 37068144
002_O 962978185
003_I 35767262
003_O 889229008
004_I 32442817
004_O 823356694
005_I 34822166
005_O 792243001
006_I 29860696
006_O 756651507
007_I 30314166
007_O 709360466

 

结论一:如果结束使用模糊匹配查找,则查询范围为 [ start, end )  ;start总是会找到第一个模糊(精确)匹配的

 

测试二:正序查找精确匹配

 查询条件:start = "002", end="008_I", reversed=false(正序查找)

返回数据
002_I 37068144
002_O 962978185
003_I 35767262
003_O 889229008
004_I 32442817
004_O 823356694
005_I 34822166
005_O 792243001
006_I 29860696
006_O 756651507
007_I 30314166
007_O 709360466
008_I 29475122

 

结论二:如果结束使用精确匹配,则查询范围为 [ start, end ]

 

测试三:反序查找模糊匹配

 

查询条件:start = "008", end="002", reversed=true(反序查找)

返回数据
007_O 709360466
007_I 30314166
006_O 756651507
006_I 29860696
005_O 792243001
005_I 34822166
004_O 823356694
004_I 32442817
003_O 889229008
003_I 35767262
002_O 962978185
002_I 37068144

 

结论三:反序查找模糊匹配边界为:( start, end ]

 

测试四:反序查找精确匹配

 

查询条件:start = "008_I", end="002", reversed=true

 

返回数据
008_I 29475122
007_O 709360466
007_I 30314166
006_O 756651507
006_I 29860696
005_O 792243001
005_I 34822166
004_O 823356694
004_I 32442817
003_O 889229008
003_I 35767262
002_O 962978185
002_I 37068144

 

结论四:反序查找精确匹配边界为:[ start, end ]

 

总结:

无论正向还是反向匹配,物理存储的end column匹配都是不能查询出模糊匹配的,只可以查询出精确匹配的内容。

 

正向:

end模糊匹配:[ start, end)

end精确匹配:[ start, end ]

 

反向

start模糊匹配:( start, end ]

start精确匹配:[ start, end ]  

 

--end

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值