rowkey设计原则

  1. 1.Rowkey的唯一原则
  2. 2.Rowkey的排序原则
  3. 3. Rowkey的散列原则
  4. a.Reverse反转
  5. 例子:反转Rowkey的例子通常以手机举例,可以将手机号反转后的字符串作为Rowkey,这样的就避免了以手机号那样比较固定开头(137x15x等)导致热点问题
  6. b.Salt加盐
  7. Salting是将每一个Rowkey加一个前缀,前缀使用一些随机字符,使得数据分散在多个不同的Region,达到Region负载均衡的目标
  8. 例如:加Salt前的Rowkeyabc001abc002abc003
  9. 分别加上abc前缀,加SaltRowkey为:a-abc001b-abc002c-abc003
  10. c.Hash散列或者Mod
  11. 4.Rowkey的长度原则
  12. Rowkey长度设计原则:Rowkey是一个二进制,Rowkey的长度被很多开发者建议说设计在10~100个字节,建议是越短越好
  13. 原因有两点:
  14. 其一是HBase的持久化文件HFile是按照KeyValue存储的,如果Rowkey过长比如500个字节,1000万列数据光Rowkey就要占用500*1000万=50亿个字节,将近1G数据,这会极大影响HFile的存储效率
  15. 其二是MemStore缓存部分数据到内存,如果Rowkey字段过长内存的有效利用率会降低,系统无法缓存更多的数据,这会降低检索效率