HBase的rowkey设计原则、HBase避免热点 11
程序员文章站
2022-05-27 15:40:07
...
1. 唯一性原则
每条数据的rowkey必须唯一,不重复
2. 长度原则
rowkey尽量越短越好,一般不要超过16字节
原因
- 数据的持久化文件HFlie中是按照KeyValue存储的,如果rowkey过长,比如超过100字节,1000w行数据,光rowkey就要占用100*1000w=10亿个字节,将近1G数据,这样会极大影响HFlie的存储效率
- MemStore将缓存部分数据到内存,如果rowkey字段过长,内存的有效利用率就会降低,系统不能缓存更多的数据,这样会降低检索效率
3. 散列原则
就是为了保证数据写入时,能够均衡流入到不同的region,避免大量的数据同时流入到相同的region中,最后造成HRegionServer负载比较高。如果没有保证散列原则,后期可能会出现热点问题。
如何保证散列,避免热点问题?
- 加盐
它就是在rowkey的前面加上随机数
rowkey=随机数+xxxx - 取哈希值
它就是通过一个hash算法,将原本的rowkey取哈希值,也是为了获取得到一个类似于随机数的哈希值 - 反转
把数据中一些经常改变或者是最没有实际意义的信息,放到rowkey的最高位`
手机号反转
136****9301---------->1039****631
136****6234---------->4326****631
136****7223---------->3227****631
136****5432---------->2345****631
时间戳反转