Hbase行键的设计

rowKey的设计

热点问题其实就是因为rowkey的设计(比如都是按照字典顺序的话),导致读写的时候某一个region过多的数据,影响hbase的性能。

  1. 基本原则:
    首先要保证rowkey的唯一原则和排序原则。
    rowkey是要保证唯一确定一行数据(不考虑版本问题)。
    rowkey是根据ASCII有序设计的。
  2. 长度不要过长。
    这个的话就比较明显,因为hbase的数据量很大,然后过多的数据导致内存占用大,资源浪费。
    并且在java代码中的话,rowkey的读写都是通过byte数组来实现的,过长就会造成读写速度的问题。
  3. rowkey的散列原则。
    倒置:比如存储一个网站浏览日志。可以采用 用户ID_时间戳_业务指标,由于时间戳是有序的,我们可以将时间戳倒置,这样的话我们读写某一范围的数据的时候,就可以尽可能的避免热点问题。

加盐:可以运用特定的指标给rowkey加上指定的前缀。比如:login007,login008,login009
我们可以修改为 z-login007,y-login008,g-login009。

hash散列或者md5等算法:给rowkey按照你的原则加上特定的前缀,比如:

9bf0-abc001 (abc001在md5后是9bf049097142c168c38a94c626eddf3d,取前4位是9bf0)
7006-abc002
95e6-abc003

设计rowkey的话,你不仅仅要考虑的是rowkey的合理性,同时要综合你自己的读写要求,比如通过md5算法加入前缀你可以查询自己想要的数据,但是随机加入前缀的话也有可能造成数据读写困难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值