我知道模糊行滤波器首先采用两个参数为行键,第二个参数为模糊逻辑。我从相应的Java类Fuzzyrowfilter中了解的是,过滤器评估当前行,并尝试计算将匹配模糊逻辑并跳到非匹配键的下一个更高的行键。
我无法理解以下内容
扫描如何跳到某些行键?它是否可以使用并比较当前的行键。扫描如何知道下一个匹配行键的存在?不进行完整扫描(如果跳跃)
您正确理解了所有内容。
对于那些从网络搜索来到这里的人,这里有两个链接,这些链接一般可以利用行跳过,以及如何在fuzzyrowfilter中完成
- hbase fuzzyrowfilter:替代辅助索引
- HBase中的过滤器(或Intra Row扫描第二部分)
如果过滤器知道它是最后一个钥匙,并且需要跳过:
- 过滤器返回
SEEK_NEXT_USING_HINT
- 区域服务器调用getNextCellhint返回建议的
Cell
- 区域服务器执行与
scan
中的第一个密钥的查找密钥完全相同的例程 - 它检查可用的HFiles检查是否存在的密钥是否存在- 区域服务器读取每个文件的"预告片"部分,以获取元数据的偏移
- 区域服务器读取元和fileInfo元数据块类型太新(时尚)无法包含我们想要的东西。在此处查看有关HFILE格式的更多信息
- 如果密钥在HFILE内部,则区域服务器使用Datablock索引段来计算带有问题的密钥
- 如果带有密钥的数据Bock发生在区域服务器块缓存中,则跳过下一步
- DataBlock从HFILE读取
- 区域服务器最终扫描键,一对一直到击中目标
- 找到的键,可能是整个行(取决于过滤器),将其传递给过滤器代码
- 整个周期重复
关于HBase密钥的第一件事是保存在词典上排序的 order中,此数据由Meta文件中的HBase Master存储。因此,当应用模糊行滤波器时,它可以直接跳过所有与行键匹配的值。
现在,它要做的就是选择行键,然后扫描钥匙的不确定部分。
例如。如果您的行键范围是123456689 - 123456889
然后,您的模糊行滤波器将为123456???
-这里发生的是模糊行滤波器跳到以123456
开头的行,模糊行滤波器的范围如下如下123456000 - 123456999