大数据存储行键
RowKey 是什么?
每行的唯一 ID,也是 HBase 唯一的索引,按字典序排好
类比:字典里的词条,查什么全靠它
RowKey 决定一切
HBase 按 RowKey 的字典序存储,所有查询都从 RowKey 出发:get 是精确定位,scan 是范围扫描。没有 RowKey,就只能全表扫——几十亿行基本等于不可用。
所以设计表结构时,第一件事不是画字段,而是想清楚“业务会怎么查”,再倒推 RowKey 怎么拼。
三条设计原则
长度短、散列均匀、把查询条件放前面。
- 长度短:RowKey 会存在每个单元格里,几十字节和几百字节的差别会被数据量放大
- 散列均匀:避免所有写请求打到同一个 Region(热点),常用加盐前缀、哈希、反转时间戳
- 前缀有序:把最常用的过滤条件放最前面,比如「用户ID + 时间」,查某用户最近记录就是连续扫描
时间戳要反转
如果 RowKey 是 `userId + timestamp`,同一用户的新数据会排在后面,查“最近 10 条”需要先扫到末尾,还得知道总长度。用 `Long.MAX_VALUE - ts` 反转后,最新的数据排在最前,`scan` 设 limit 10 就够了。