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结合的方法,无论哪种方式,都建议做实际业务场景下数据的压力测试以得到最优结果

发布了13 篇原创文章 · 获赞 0 · 访问量 134

猜你喜欢

转载自blog.csdn.net/vip9850/article/details/105493668