关于Hbase多版本存储的一个注意点

HBase是一个多版本管理系统。0.96版本前,每列默认保留3个版本;之后默认为1个版本。版本通过插入时的时间戳区分,存储层按时间戳降序排列,因此默认查询始终返回最新数据,除非指定时间范围。

常用的Put和Delete API默认使用当前系统时间戳,也可以手动指定。但非必要不建议自定义时间戳,否则可能引发异常。

例如,若Put时设置时间戳为Long.MAX_VALUE,后续插入、更新或删除时未传入更大时间戳,由于版本数限制(如1个),HBase会认为新操作属于旧版本,无法覆盖已有数据,导致所有变更无效,甚至删除操作也失效。这时无论执行多少次删除,数据都不会被清除。

需注意,Put和Delete的带时间戳构造方法是为列族或列统一设置时间戳,并非RowKey的时间。若列级别也指定了时间戳,则优先使用列级设置。

总之,HBase的多版本机制强大实用。使用时应尽量避免随意修改默认时间戳逻辑。若确需自定义,必须确保后续所有操作的时间戳均大于首次插入值,否则修改不会生效。当发现删除或更新无法生效时,在排除代码问题后,应优先检查操作时间戳是否小于现有数据版本。再次强调,除非业务明确要求,否则不建议在插入时主动设置时间戳。

相关推荐
踏月的造梦星球3 小时前
DMDPC 学习:架构、部署、运维与调优
运维·数据库·学习·架构
韩楚风3 小时前
【参天引擎】事务生命周期 / MVCC / Undo / ACID / 分布式事务 功能域整体解析
数据库·分布式·mysql·架构·cantian
明航咨询—张老师3 小时前
软考软件评测师技术深度剖析:2026年考试改革后的知识体系与备考架构
大数据·架构
renhongxia14 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
程序员无隅4 小时前
Coding Agent 为什么压缩上下文后还能继续工作?上下文模块设计拆解
java·开发语言·数据库
愿做无知一猿4 小时前
Nacos连接MySQL异常?DataGrip竟成救星
数据库·mysql
G.O.G.O.G4 小时前
LeetCode SQL 从入门到精通(MySQL)06(上)
数据库·sql·mysql·leetcode
千桐科技4 小时前
qData 数据中台开源版从 MySQL 到 Doris完成一次数据同步
大数据·mysql·开源·doris·数据中台·qdata
研究员子楚5 小时前
GEO行业发展标准体系白皮书V2.0-第10卷 · 全球篇:跨国标准协同与全球品牌语义治理框架
数据库·人工智能·microsoft·架构·geo
Omics Pro6 小时前
深度学习多组学互作:组内+组间
数据库·人工智能·深度学习·mysql·搜索引擎·自然语言处理