HBase delete和put使用注意点,并不是get或scan出现bug!

本文深入探讨HBase中的数据操作特性,包括delete如何仅做标记不直接删除,put覆盖数据后的可见性,以及deleteall对后续put操作的影响。在HBase中,delete标记数据而非立即删除,旧数据在major_compact前可能仍可读取。put覆盖的数据在删除最新版本后,可能返回前一未压缩版本。deleteall设定的时间戳限制会影响新put数据的可见性。
摘要由CSDN通过智能技术生成

概要

HBase的命令只会添加,并不会覆盖和删除。在HBase进行major_compact时才会对被标记的键值对进行压缩。

验证准备

创建表stu ,含有一个列族info,其保存的最大版本数为1

create 'stu',{NAME => 'info', VERSIONS =>1}

注意点总结

1、delete只会添加标记,不会直接删除数据

delete操作仅仅是加个tombstone标记,未被真正删除。

put 'stu','001','info:name','jack1'
put 'stu','001','info:name','jack2'
delete 'stu','001','info:name'
scan 'stu',{RAW => true}

#RAW=>true 可输出未被压缩的数据
#输出结果:
#ROW                   COLUMN+CELL
# 001                  column=info:name, timestamp=2021-02-22T18:23:49.506, type=Delete
# 001                  column=info:name, timestamp=2021-02-22T18:23:49.506, value=jack2

2、put覆盖的旧数据不会直接消失,在最新数据被删除时还有可能会出现

当最新的数据(jack2)被删除后,尝试get最新的数据,会尝试获得前一个未被压缩的数据(jack1),而不是一定返回空值。

get 'stu','001','info:name'
# 输出结果:
# ROW                   COLUMN+CELL
# 001                  column=info:name, timestamp=2021-02-22T18:23:46.932, value=jack1

3、deleteall时间戳≤T的数据行后,再put时间戳≤T的数据会失败

put 'stu','002','info:age','20',100
deleteall 'stu','002','',1000
put 'stu','002','info:age','20',200
get 'stu','002'
# 输出结果为空
# 因为deleteall添加了时间戳≤1000的tombstone标记,再次put时间戳小于1000的将不可见
put 'stu','002','info:age','20',4000
# 时间戳大于1000,成功输出:
# COLUMN                CELL
# info:age             timestamp=1970-01-01T08:00:04, value=20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热心小伙chj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值