performance - 我应该在 HBase 中使用 prefixfilter 还是 rowke

不知道为什么用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

最佳答案

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-or-JSP

[更新 1] 结果表明 PrefixFilter 会执行全表扫描,直到它通过过滤器中使用的前缀(如果找到)。使用 PrefixFilter 获得快速性能的建议似乎是在 PrefixFilter 之外指定 start_row 参数。见 related 2013 discussion on the hbase-user mailing list .

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

关于performance - 我应该在 HBase 中使用 prefixfilter 还是 rowkey 范围扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10942638/

相关文章:

opencv - 更改图像opencv的宽度步长

docker - 无法在 Dockerfile 中运行 sysctl 命令

python - GUI 卡住了其余的 python 代码

docker - depends_on不等待docker-compose 1.22.0中的其他服务

python - 使用OpenCV计数视频中的帧…(Python)

docker - Docker端口映射在Windows 10上不起作用

android - 在 JNI/Android 中初始化 C++ 对象一次

c# - Emgu.CV在Windows 7 x64上不起作用

opencv - OpenCV旋转的图像显示时形状不正确

python - 质心计算程序中的时间滞后