一文详解HBase表设计原则和实现

本文深入解析HBase表空间、rowkey、列族和列的设计,教你如何根据业务场景优化配置,避免热点,提高性能,确保数据一致性。

前言

        HBase作为一款历史悠久且具有代表性的NOSQL的数据库,其优点与缺点同样的明显,所以在确认了使用场景适合后下一步就是如何用好HBase了,不夸张的说,HBase使用的好与坏可能会造成天差地别,所以当你抱怨HBase如何的差劲不如XXX的时候,一定要先确认下自己是不是真的很好的使用了HBase,让其充分发挥出自己的亮点

正文

        想要用好HBase,首先要确认自己的业务场景是不是适合使用HBase,这个我在另外一篇博文中已经有所描述HBase的使用场景,大家可以参考下。如果确认业务和数据场景适合使用HBase,那么下一步就是如何用好HBase了,这个大体上来说分为两部分,第一部分就是通过配置优化的方式来根据业务场景打造合适的集群,这个后续会单独讲解;第二部分就是如何把HBase的核心也就是表(Table)设计好,这个就是本文要着重讲解的内容。

    HBase的表设计包含如下几个方面:

  • 表空间设计
  • rowkey设计
  • 列族设计
  • 列设计

    下面就从这四个方面来详细讨论

表空间设计

       HBase 1.X以来,HBase从原始的0.9X版本的table一级设计,升级到了namespace:table的两级设计。这样做的好处不仅使HBase的逻辑结构更加的清晰,也为后续的权限管理以及资源隔离等高级属性提供了很好的基础。HBase有默认有两个namespace,一个是hbase,用来存放HBase元数据相关的内容;另一个是default,用来存放未指定namespace的业务数据。也就是说在入库的时候如果只指定tablename,未指定namespace的话,表就会被创建在default的这个namespace中。在这里建议根据业务或者数据特点划分namespace,方便后续进行数据管理:

  • 针对hbase使用较多数据量较大的业务,可以将数据放在单独的namespace中单独管理,入库的时候tablename使用namespace:tablename的方式来处理
  • 针对hbase使用较少数据量较少的业务,可以将数据放在default的namespace中统一管理,入库的时候直接单独使用tablename方式来处理

rowkey设计

       HBase的rowkey设计是HBase表设计中最重要的一部分,rowkey设计既要满足业务查询的功能需求,也要满足业务查询的性能需求,基本上rowkey设计的合理,HBase的性能和效果就不会太差,下面就详细说说rowkey设计的原则:

rowkey的作用

  • HBase的源生查询就三种:单rowkey的get操作;范围rowkey的scan操作以及全表的scan操作,都是根据rowkey发起的,上述表明HBase的查询依赖rowkey
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值