HBase-Scan扫描

0.架构图:
HBase-Scan扫描
文章图片

1 . get()方法底层也是Scan实现
2 .Scan:类似数据库系统中的游标
【HBase-Scan扫描】3.为什么要用Scan:

1.HBase中的存储文件是不可变的,因此不能直接删除。因此有墓碑标记,记录着已删除的信息 2.也不能直接更新,隔了一段时间新写入的数据会刷写到不同的存储文件中 3.那么如何得到“真正准确的一行”? 4.HBase没有实现直接访问特定一行或列的功能。 5.HFile中最小的单元是块,所以Scan想要访问到特定的行或列,必须载入所有可能含有该数据的块,并且扫描这些块来寻找。这既是Scan。

4.Scan原理:
5.横跨内存、存储文件、硬盘来寻找. 6.而墓碑标记的时间戳如果大于标记的该数据的时间戳,则代表该数据已被删除。 7.Scan扫描块是不断调用next()函数。直到读取完所有块。 8.但是还有一个问题:HBase中数据量巨大,如何快速查询? 9.在Scan扫描之前,需要一个快速排查的阶段。使用时间戳和可选的布隆过滤器来跳过绝对不能有匹配数据的文件。

    推荐阅读