中间件速查手册
大数据存储行键

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 就够了。

它出现在这些中间件里

相关问题

相关概念