RowKey 的设计原则:
1. 长度原则: 尽可能短,因为 HBase 的持久化文件 HFile 是按照 KeyValue 存储的。尽可能不要超过 16 个字节。
2. 散列原则:
设计的 RowKey 应均匀分布在各个 HBase 节点上。如 RowKey 是按系统时间戳的方式递增,RowKey 的第一部分如果是时间戳的话,将造成所有新数据都在一个 RegionServer 堆积的热点现象,也就是通常说的 Region 热点问题。
热点问题:热点发生在大量的 client 直接访问集中在个别 RegionServer 上 (访问可能是读、写或者其他操作), 导致单个 RegionServer 机器自身负载过高,引起 性能下降甚至 Region 不可用,常见的是发生 jvm full gc 或者显示 region too busy 异常情况
3. 唯一性原则
保证 rowKey 的唯一性。由于在 HBase 中数据存储是 Key-Value 形式,若 HBase 中同一表插入相同 RowKey,则原先的数据会被覆盖掉(如果表的 version 设置为 1 的话,默认保留时间戳为最新的数据)。