Hbase之rowkey设计原则和方法

Hbase之rowkey设计原则和方法
a.设计原则
1 避免使用递增行键/时序数据
如果ROWKEY设计的都是按照顺序递增(例如:时间戳),这样会有很多的数据写入时,负载都在一台机器上。我们尽量应当将写入大压力均衡到各个RegionServer
2.rowkey长度原则
在HBase中,要访问一个Cell(单元格),需要有ROWKEY、列蔟、列名,如果ROWKEY、列名太大,就会占用较大内存空间。所以ROWKEY和列的长度应该尽量短小
ROWKEY的最大长度是64KB,建议越短越好。10-100长度即可,最好是8的整数倍
2.1建议使用long类型代替string
使用long等类型比String类型更省空间
long类型为8个字节,8个字节可以保存非常大的无符号整数,例如:18446744073709551615。如果是字符串,是按照一个字节一个字符方式保存,需要快3倍的字节数存储。
3.rowke唯一原则
ROWKEY唯一性设计ROWKEY时,必须保证RowKey的唯一性,由于在HBase中数据存储是Key-Value形式,若向HBase中同一张表插入相同RowKey的数据,则原先存在的数据会被新的数据覆盖。
4.rowkey避免热点问题
Region热点:整个表中,其中一个Region非常忙,其他的Region清闲热点是指大量的客户端(client)直接访问集群的一个或者几个节点(可能是读、也可能是写)大量地访问量可能会使得某个服务器节点超出承受能力,导致整个RegionServer的性能下降,其他的Region也会受影响

b.rowkey设计方法
1.salt加盐
Salt是将每一个rowkey加一个前缀,前缀使用一些随机字符,使得数据分散在多个不同的Region,达到Region负载均衡的目标.[优缺点:增加了写操作的吞吐量,但是增加了读操作的开销(本是写一个region但是最后写道多个region)]
2.Hash散列或者Mod
用Hash散列来替代随机Salt前缀的好处是让一个给定的行有相同的前缀,这在分散了Region负载的同时,使读操作也能够腿短,确定性Hash(比如MD5后取前4位左前缀)能让客户端重建完整的Rowkey可以直接使用get操作,获取想要的行.数据量越大这样的会使分区更加均衡,如果Rowkey是数字类型的,也可以考虑Mod方法.
3.Reverse反转
针对固定长度的Rowkey反转后存储,这样可以使Rowkey中经常改变的部分放在最前面,可以有效的随机rowkey.例如手机号就可以使用反转.
————————————————
版权声明:本文为CSDN博主「不吃饭的猪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_51473488/article/details/123173988

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值