Hbase总结05_行健设计

表结构

Hbase的表有两种基本的键结构:行健(row key)和列键(column key)。

  • 列键:包括了列族名和限定符,定位到列的索引
  • 行健:相当于关系型数据库中的主键,通过行健得到逻辑布局中一行的所有列

每个行健在表中具有唯一性,可以用来查询正行数据,行健的值即代表着数据的位置,内容即索引的结构。

表至少包含一个列簇,每个列簇中可以包含一到多个单元格,每个单元格对应一个键值对,可以用列键查询一行中某个单元格的值。

Hbase采用列式存储方式,将一个列簇的数据存在一起,以单元格为单位将数据依次保存,每个单元格内部都要保存行健和列键的值,空值的单元格不存。

同一个单元格的不同版本被单独存储为连续的单元格,单元格按照时间戳降序排列,所以默认读取的是最新的单元格数据

同一列族的单元格在存储的时候先按行健排序,当一行中有多个单元格的时候再按列键排序,同一单元格有多个版本的时候按时间戳排序

根据以上的存储特性,建议在查询的时候指定列族信息可以有效减少查询的存储文件,提高效率

高表和宽表

Hbase包含两种表形式:高表和宽表,高表就是列少行多,宽表则反之

HBase只能按行切分,高表数据无法拆分,更无法进行HBase的负载均衡等特性,但高表便于用于一次更改多个列的值,Hbase具有行的原子性。

行健作用

数据是按照 Rowkey 的 ASCII 字典顺序进行全局排序的,由小到大排列

根据 RowKey 进行检索,通过 RowKey查找所在的 Region,然后向该 Region 获取数据。

结合实际的高频的查询场景来组合选择的字段,越高频的查询字段排列越靠左

设计原则

通用性原则

将行健设计成String类型,避免在不同系统环境下出现长度不一致现象;

长度原则

行健在列簇的每个单元格内都会保存一份,行健过长会浪费存储空间,推荐10-100字节

唯一性原则

必须在设计上保证其唯一性。

散列原则

设计的 RowKey 应均匀的分布在各个 HBase节点上,避免造成热点问题。

方法举例:

  • 随机数,在rowkey的前面增加随机数,虽然增加了写操作的吞吐量,与此同时也增加了读操作的开销
  • UUID
  • Hash 散列或者 Mod 取模,Md5,等加密算法
  • 业务有序数据方向(对业务数据进行reverse)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值