Hbase是一种分布式的,多版本的,面向列的,半结构化的,稀疏的,多维的,排序的组件.
Hbase表可以理解为一个3维Map,包括row key, column(family+qualifier),timestamp
分布式: 将数据切分成多个region
持久化: 底层为HDFS
多版本: 同一个rowkey可以根据timestamp存储多个版本
稀疏: column没有值时, 不占用存储空间,即不单独存储元数据
排序: 默认按rowkey排序,同一个rowkey内按timestamp排序
背景: 我们使用微信时,经常会查看聊天历史记录, 历史记录的特点是量大,每天都可能有新增,一般按时间排序.
设计: 将聊天消息存储在Hbase中,消息包含发送人id,接收人id,时间戳, 内容,发送状态等,
如下图所示:
userId1userId2sendTimemessageStatusmessage12345678234567891418812276536发送成功你吃饭没12345678234567891428812276536发送中晚上好row key设计规则: reverse(用户id1)-用户id2-inverse(时间戳) 目的: reverse(用户id)用于防止热点问题, inverse(时间戳)=long最大值-当前时间戳, 默认时间倒序
根据userId,按从大到小(先读最新消息)读取timestamp在(startTs, endTs]的n条消息。
