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