HBase-Scan扫描
0.架构图:
文章图片
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扫描之前,需要一个快速排查的阶段。使用时间戳和可选的布隆过滤器来跳过绝对不能有匹配数据的文件。
推荐阅读
- 扫描全能王产品分析
- 扫描线填充算法就这么简单
- 关于蓝牙扫描出现的BLUETOOTH_PRIVILEGED权限异常
- SpringBoot之@ComponentScan和@SpringBootApplication扫描覆盖问题
- React滑动条扫描图片组件(.tsx|React滑动条扫描图片组件(.tsx + .less, hooks组件)
- 模拟|【离散化扫描】 校门外的树{加强版}
- 微信内扫描识别二维码打开网页的时候调用外部浏览器打开页面
- bzoj3051[WC2013]平面图(树上倍增+平面图转对偶图+扫描线)
- 线段树|[CF377D][线段树][扫描线]Developing Game
- nRF|nRF 主机扫描广播数据