Scan和Get之间的性能差异?

Ani*_*tta 11 hbase

我有一个包含8G数据的HBase表.

当我在该表上使用部分键扫描来检索给定键的值时,我得到几乎恒定的时间值检索.

当我使用a时Get,所花费的时间远远大于扫描时间.但是当我查看代码时,我发现它Get本身使用的是Scan.

任何人都可以解释这个时差吗?

Sum*_*man 5

正确,当您发出Get时,会在幕后发生扫描.Cloudera的博客文章证实了这一点:"每次发出获取或扫描时,HBase扫描(原文如此)通过每个文件来查找结果."

我无法确认您的结果,但我认为线索可能在于您的"部分密钥扫描".比较部分键扫描和获取时,请记住用于Get的行键可以是比用于扫描的部分键长得多的字符串.

在这种情况下,对于Get,HBase必须进行确定性查找,以确定需要匹配和获取的行键的确切位置.但是使用部分密钥,HBase不需要查找确切的密钥匹配,只需要找到该密钥前缀的更近似位置.

答案是:这取决于.我认为这将取决于:

  1. 您的行键"架构"或组成
  2. Get键的长度和Scan前缀
  3. 你有多少个地区

可能还有其他因素.