HBase RowKey的设计
Rowkey的设计
rowkey设计目的
1.RowKey:rowkey是一条数据的唯一标识,这条数据存储于哪个分区,取决于rowkey处于哪个预分区的区间。
2.设计rowkey的目的:让数据均匀地分布于所有的region中,在一定程度上防止数据的倾斜。
rowkey设计原则
1.rowkey长度原则:rowkey是一个二进制码流,长度被很多开发者建议设计在10-100字节,不过建议是越短越好,不要超过16个字节。
原因:
2.rowkey散列原则:
如果rowkey是按时间戳的方式递增,不要将时间放在二进制码的前面,建议将rowkey的高位作为散列字段,由程序循环生成,低位放时间字段,这样将提高数据均衡分布在每个RegionServer实现负载均衡的几率
如果没有散列字段,首字段直接是时间信息将产生所有新数据都在一个RegionServer上堆积的热点现象,这样在做数据检索的时候负载将会集中在个别RegionServer,降低查询的效率。
3.rowkey唯一原则:必须在设计rowkey上保证其唯一性。
如何避免热点问题
1.加盐
加盐是指将随机数据添加到rowkey设计值的开头
2.哈希
k恶意使用单向散列,而不是随机分配。这样可以使给定的行时钟以相同的前缀”被盐化“,使用确定的哈希可以让客户重构完整的rowkey,可以使用Get操作
3.反转
反转固定长度或者数字格式的rowkey,以使最经常变化的部分放在前面,例如:手机号和时间戳作为rowkey设计时的反转。