partial key scan并没有反应其特点,应该叫prefix key scan更好些,也就是说必须作为前缀才有意义,若是中间的key,就不行了。
比如rowkey形式为<key1>-<key2>-<key3>
以key2或key3无法做partial scan。
对于该问题几种解决办法:
1)冗余。建另外一张表,以要查询的子key比如key2放在组合rowkey开始位置。
2)利用某子key数据少的特点。比如若key3数据较少,可以将其放在rowkey开始位置:<key3>-<key2>-<key1>,若有对key2的查询,可以枚举key3来依次构造key3-key2前缀进行partial scan。
参见http://stackoverflow.com/questions/12908378/hbase-searching-by-part-of-a-key
3)fuzzy row filter。
可以构建通配符形式的中间子key的scan。(但匹配key必须为固定长度)
本质上还是full scan,但是由于略过一部分数据,scan性能提到提升。---能提升多少取决于能略过多少数据,若要过滤key的集合很大对应row很多,基本上没法略过,要一一匹配,就没太大意义了。
参见http://blog.sematext.com/2012/08/09/consider-using-fuzzyrowfilter-when-in-need-for-secondary-indexes-in-hbase/
Performance of the scan based on Fuzz