Hbase的RowKey设计原理

rowKey设计需要遵循三大原则:

  1. 唯一性原则

rowkey在设计时必须保证其唯一性,这是由于HBase的核心存储结构是KeyValue形式,在同个版本表格的情况下,如果后添加的rowkey与已有的相同,则会覆盖原先的数据。

补充:
排序原则
在Hbase中,rowkey是按照Ascll的顺序排序存储的,因此在rowkey的设计时,要充分利用这个特点,将经常读取的数据存储到一块,将最近可能会被访问的数据存储到一起。

  1. 长度原则

rowkey是一个二进制码流,可以是任意字符串,最大长度为64k,实际应用中一般为10-100byte,以byte[]形式保存,一般设计为定长,建议越短越好,不超过16个字节。这是由于Hbase的数据持久化文件HFiile是按照KeyValue形式存储,rowkey设计过长的话,在大量数据存储的情况下,rowkey会占用大量存储空间,极大影响HFile的存储效率;MemStore将缓存部分数据到内存中,rowkey过长,内存的有效利用率就会降低,从而导致系统不能缓存再多的数据,降低检索的效率。

  1. 散列原则

即让rowkey没有任何规律,从而实现设计的rowkey均匀的分布在每个Hbase节点上。就以常见的时间戳为例,如果rowkey按照时间戳的方式递增,那么不要将时间戳设计到第一部分,以避免所有的数据集中在一个RegionServer上,造成热点堆积导致的单个RegionServer负载过高的问题,从而提高查询效率。
可以以一下几种方法解决:
1). 加盐
如果rowkey按照时间戳的方式递增,则可以在rowkey前增加随机数,以避免热点堆积。
2). 哈希散列
哈希会使同一行永远用一个前缀加盐。哈希也可以使负载分散到整个集群,但是读却是可以预测的。使用确定的哈希可以让客户端重构完整的rowkey,可以使用get操作准确获取某一个行数据。
3). 反转
反转固定长度或者数字格式的rowkey。这样可以有效的随机rowkey,但是会牺牲rowkey的有序性。
4). 时间戳反转
快速获取数据的最近版本,使用反转的时间戳作为rowkey的一部分。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值