Hbase rowkey设计

rowkey长度原则

rowkey是一个二进制码流,可以是任意字符串,最大长度 64kb ,实际应用中一般为10-100bytes,以 byte[]形式保存,一般设计成定长。建议越短越好,不要超过16个字节,原因如下:

  • 数据的持久化文件HFile中是按照KeyValue存储;
  • MemStore大小固定,rowkey字段过长,存储的row就越少。
  • 目前操作系统都是64位系统,内存8字节对齐,控制在16个字节,8字节的整数倍利用了操作系统的最佳特性。

rowkey散列原则

如果rowkey按照时间戳的方式递增,不要将时间放在二进制码的前面,建议将rowkey的高位作为散列字段,由程序随机生成,低位放时间字段,这样将提高数据均衡分布在每个RegionServer,以实现负载均衡的几率。

rowkey唯一原则

必须在设计上保证其唯一性,rowkey是按照字典顺序排序存储的

热点

下面是一些常见的避免热点的方法以及它们的优缺点:

时间戳反转

一个常见的数据处理问题是快速获取数据的最近版本,使用反转的时间戳作为rowkey的一部分对这个问题十分有用,可以用Long.Max_Value - timestamp
追加到key的末尾,例如 [key][reverse_timestamp]

你可能感兴趣的:(Hbase rowkey设计)