HBase的表的设计

六、HBase的表设计

        HBase表的设计 会直接影响hbase使用的效率 和 使用的便利性

        HBase表的设计 主要是 列族的设计 和 行键的设计

 

        1.列族的设计

                在设计hbase表时候,列族不宜过多,越少越好,官方推荐hbase表的列族不宜超过3个。

                经常要在一起查询的数据最好放在一个列族中,尽量的减少跨列族的数据访问。       

                如果有多个列族 多个列族中的数据应该设计的比较均匀

        2.行键的设计

                hbase表中行键是唯一标识一个表中行的字段,所以行键设计的好不好将会直接影响未来对hbase的查询的性能和查询的便利性

                所以hbase中的行键是需要进行设计的

               

                行键设计的基本原则:

                        行键必须唯一

                                必须唯一才能唯一标识数据

                        行键必须有意义

                                这样才能方便数据的查询

                        行键最好是字符串类型

                                因为数值类型在不同的系统中处理的方式可能不同

                        行键最好具有固定的长度

                                不同长度的数据可能会造成自然排序时排序的结果和预期不一致

                        行键不宜过长

                                行键最多可以达到64KB,但是最好是在10~100字节之间,最好不要超过16字节,越短越好,最好是8字节的整数倍。

               

                行键的最佳实践:

                        散列原则:

                                行键的设计将会影响数据在hbase表中的排序方式,这会影响region切分后的结果,

                                  要注意,在设计行键时应该让经常要查询的数据分散在不同的region中,防止某一个或某几个regionserver成为热点。

                        有序原则:

                                行键的设计将会影响数据在hbase表中的排序方式,所以一种策略是将经常连续查询的条件作为行键最前面的数据,

                                 这样一来可以方便批量查询

 

 

七、hbase案例

        用户表

                id     name       age  gender email

                001  zhang      19    男            zhang@qq.com

                002  wang       20    男            wang@qq.com

        用户访问的网页                           

                host        viewtime content    userid

                www.baidu.com      2016-12-20     xxxx        001

                www.sina.com 2016-11-10      xxxx        001

                www.souhu.com     2016-11-09      xxxx        001

                www.baidu.com      2016-12-20     xxxx        002

                www.163.com         2016-12-20     xxxx        002

   将这两个表和合并到Hbase表中,那么rowkey如何设计呢? 看业务需求吧,例如时间_姓名

2016-12-20_zhang

2016-12-20 _wang 

这样设计的话,我们可以利用行键前缀过滤器:Filter filter = new PrefixFilter("2016-12-20".getBytes()) ;来进行扫描table。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值