10

不知道为什么用prefixfilter查询会很慢。有人可以解释一下哪个是查询 HBase 的最佳方法,谢谢。

hbase(main):002:0> scan 'userlib',{FILTER=>org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes('0000115831F8'))}
ROW               COLUMN+CELL                                                                                                                                
0000115831F8001   column=track:aid, timestamp=1339121507633, value=aaa                                                                                       
1 row(s) in 41.0700 seconds

hbase(main):002:0> scan 'userlib',{STARTROW=>'0000115831F8',ENDROW=>'0000115831F9'}                                                                                        
ROW               COLUMN+CELL                                                                                                                                
0000115831F8001   column=track:aid, timestamp=1339121507633, value=aaa                                                                                       
1 row(s) in 0.1100 seconds
4

2 回答 2

23

HBase 过滤器 - 甚至行过滤器 - 非常慢,因为在大多数情况下,它们会执行完整的表扫描,然后过滤这些结果。看看这个讨论: http: //grokbase.com/p/hbase/user/115cg0d7jh/very-slow-scan-performance-using-filters

然而,行键范围扫描确实要快得多——它们相当于过滤表扫描。这是因为行键是按排序顺序存储的(这是 HBase 的基本保证之一,它是一种类似 BigTable 的解决方案),因此对行键的范围扫描非常快。更多解释:http ://www.quora.com/How-feasible-is-real-time-querying-on-HBase-Can-it-be-achieved-through-a-programming-language-such-as- Python-PHP 或 JSP

[更新 1] 证明 PrefixFilter 确实会进行全表扫描,直到它通过过滤器中使用的前缀(如果找到它)。使用 PrefixFilter 来获得快速性能的建议似乎是在PrefixFilter之外指定一个 start_row 参数。请参阅hbase-user 邮件列表上的相关 2013 讨论

[更新 2,来自@aaa90210] 关于上述更新,现在有一个比 PrefixFilter 快得多的有效行前缀过滤器,请参阅此答案:https ://stackoverflow.com/a/38632100/150050

于 2012-06-08T19:31:56.297 回答
0

DATE:事实证明 PrefixFilter 确实会进行全表扫描,直到它通过过滤器中使用的前缀(如果找到它)。使用 PrefixFilter 获得快速性能的建议似乎是在 PrefixF 之外指定 start_row 参数

于 2016-06-02T14:13:19.877 回答