HBase Shell 几乎比 Restful 前缀过滤器端点快 100 倍
HBase Shell Almost 100x Faster Than Restful Endpoint For Prefix Filter
如果我 运行 在 HBase shell 上使用前缀过滤器进行扫描,无论我使用什么前缀,我都会在不到 1 秒的时间内收到响应。 (0 vs 9 或 "a" vs "z" 对响应速度没有影响)。
但是,当我从 Microsoft HBase 库(在 C# 中)进行相同的查询时,最多可能需要 90 秒才能得到答案。有趣的是,如果我选择一个更接近 0 的前缀,它会更快,我离 0 越远,花费的时间就越长。 ("a" 作为前缀过滤器比 "f" 更快)。
不确定如何确定 shell 与 restful 查询的不同之处,或者如何使 restful 查询的性能更高。
一些细节:
- 这个 table
中有 20,000,000 多条记录
- row key设计为[guid]_[inverse timestamp],例如a6fc9620-5ff0-41c0-9ed9-660bc3fbb65c_9223370501253811889
关于我应该寻找或尝试改进其余 api 请求的任何想法?
原来这不是问题。 运行 shell 上的命令与我想的 API 上的命令不同。
其余 API,我提供了两个过滤器,一个页面过滤器和一个前缀过滤器。
在 HBase 上 shell 我是 运行
scan 'beacon', {STARTROW => 'ff', FILTER => "PageFilter(25)"}
STARTROW 与前缀过滤器不同。它实际上是在做一些更像是设置完整的开始行键的事情,从而提高扫描性能,因为它不会遍历整个 table.
事实证明,这也是我在其余 API 电话中应该做的。除了前缀过滤器和页面过滤器之外,当我设置开始行和结束行时,它会按预期快速运行。
Should I use prefixfilter or rowkey range scan in HBase
如果我 运行 在 HBase shell 上使用前缀过滤器进行扫描,无论我使用什么前缀,我都会在不到 1 秒的时间内收到响应。 (0 vs 9 或 "a" vs "z" 对响应速度没有影响)。
但是,当我从 Microsoft HBase 库(在 C# 中)进行相同的查询时,最多可能需要 90 秒才能得到答案。有趣的是,如果我选择一个更接近 0 的前缀,它会更快,我离 0 越远,花费的时间就越长。 ("a" 作为前缀过滤器比 "f" 更快)。
不确定如何确定 shell 与 restful 查询的不同之处,或者如何使 restful 查询的性能更高。
一些细节:
- 这个 table 中有 20,000,000 多条记录
- row key设计为[guid]_[inverse timestamp],例如a6fc9620-5ff0-41c0-9ed9-660bc3fbb65c_9223370501253811889
关于我应该寻找或尝试改进其余 api 请求的任何想法?
原来这不是问题。 运行 shell 上的命令与我想的 API 上的命令不同。
其余 API,我提供了两个过滤器,一个页面过滤器和一个前缀过滤器。
在 HBase 上 shell 我是 运行
scan 'beacon', {STARTROW => 'ff', FILTER => "PageFilter(25)"}
STARTROW 与前缀过滤器不同。它实际上是在做一些更像是设置完整的开始行键的事情,从而提高扫描性能,因为它不会遍历整个 table.
事实证明,这也是我在其余 API 电话中应该做的。除了前缀过滤器和页面过滤器之外,当我设置开始行和结束行时,它会按预期快速运行。
Should I use prefixfilter or rowkey range scan in HBase