Hbase rowkey设计 与实际使用 

  1. Hbase 设计  

相同IO特性的Column放在一个Column Family会更高效

 

时间序列数据:

以时间作为key 和value作为列 (可以设置不同相关度的数据 为一个列簇)

 

 

1 减少行数,用更宽的行 (数据量一定的情况更宽的行可以减少行数,因为你可能两张表各存储1亿,这样检索两亿,但要是放到一张表,它就只用检索1亿个rowkey ) 可以更快的扫描。宽行并不能节省空间。物理存储 还是会展开的,不过在逻辑扫描行的时候减少了行数。

2利用单行偏移量,减少行数让一行存储更多数据,1提高扫描速度,同时每行可以更快的获得更多数据。

 

3节省空间:列合并,可以减少列数,相应减少列的rowkey副本数而节省空间。

在每个keyvalue中存储更多的数据。每个列都会包含一个rowkey,key是重复存储的,每列都有key的副本。

 

1不要用 htable  和htablepool 在appserver中因为他们都是同步的,在高并发性能低

推荐使用

 

Async hbase  基于hbase的异步实现库+ netty or finagle 高并发的开源server

 

 

3 每个regionserver 管理的regions不要太多,会导致挂掉恢复成本很高

 

Key设计:

1key一定要是等长的,变长扫描起来很低效

2进行组合key设计,  metric+时间戳 对metric(监控项)进行枚举表编码,这样可以节省大量磁盘空间

3 Rowkey的散列原则,防止出现热点

 

Rowkey设计原则

1.Rowkey的唯一原则

2. Rowkey的排序原则

3. Rowkey的散列原则

Region热点问题:

1、Rowkey反转

2、Rowkey前缀加Salt加盐

3、Hash散列让一个给定的行有相同的前缀,这在分散了Region负载的同时,使读操作也能够推断。

 

4Rowkey的-短原则

其一是HBase的持久化文件HFile是按照KeyValue存储的,

其二是MemStore缓存部分数据到内存,Rowkey过长内存的利用率会降低

 

做Rowkey设计时,先考虑业务是读比写多、还是读比写少,即便HBase为写优化,也可能出现热点问题,如果我们读比较多,除了考虑以上Rowkey设计原则外,还可以考虑HBase的Coprocessor甚至elastic search结合的方法,无论哪种方式,都建议做实际业务场景下数据的压力测试以得到最优结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值