删除的本质
delete 删除操作并 不会 立即将数据从磁盘上删除
当执行删除操作时,HBase 新插入一条数据,但是 type=Delete,表示数据被删除了,也成为:墓碑标记
如下:
为什么要插入一条记录
因为 HBase 的数据 保存在 HDFS ,而 HDFS 只支持 追加数据到文件,不支持文件的随机修改,所以删除操作主要是对要被删除的数据 打上标记
如何实现查询
查询的时候其实就是把所有的 HFile 都遍历一遍,一旦发现 type=Delete 墓碑标记,就不会把数据返回给用户
注意: scan 会遍历 所有的 HFile,当数据量很大时,慎用
什么时候会真正删除
直到发生 Major Commpaction 操作时,数据才会被真正的从磁盘上删除,删除标记也会从 StoreFile 删除。
测试
添加数据
put 'student','1002','info:name','lucy'
put 'student','1002','info:age','020'
执行删除
delete 'student','1002','info:name'
执行 scan 查询
scan 'student',{RAW => true}
显示结果如下:
1002 column=info:age, timestamp=1632553396429, value=20
1002 column=info:name, timestamp=1632553389014, type=Delete
1002 column=info:name, timestamp=1632553389014, value=lucy
删除的列标记 type=Delete

