HBase表设计概述
HBase的表设计将会直接影响:HBase表使用的效率及便利性,并且 HBase的表的结构一旦确立下来之后很难更改,所以在创建HBase表时,需要对表结构进行设计。
HBase中的表设计主要设计的是:行键 和 列族
HBase表中的列族设计
- 在设计HBase表时,列族不宜过多,越少越好,官方推荐不要超过3个。
- 经常要一起查询的数据不要放在不同的列族中,尽量减少跨列族的数据访问。
- 如果根据实际的开发情况看,需要设计多个列族,则要提前考虑好列族数据有可能会分布不均匀的问题。
HBase表中的行键的设计
在hbase表中,行键是唯一标识一个表中行的字段,所以行键设计的好不好将会直接影响未来对hbase的查询的性能和查询的便利性。
行键设计的基本原则:
- 行键必须唯一
- 必须唯一
这样才能到达唯一标识数据的目的。 - 行键必须有意义
这样才能方便数据的查询。 - 行键最好是字符串类型
因为数值类型在不同的系统中处理的方式可能不同。 - 行键最好具有固定的长
不同长度的数据可能会造成自然排序时排序的结果和预期不一致。当长度不一致时,可通过拼接随机数等方式统一行键的长度。 - 行键不宜过长。
行键最多可以达到64KB,但是最好是在10~100字节之间,最好不要超过16字节,越短越好,最好是8字节的整数倍。
行键设计的最佳实践:
- 散列原则:
行键的设计将会影响数据在hbase表中的排序方式,这会影响region切分后的结果,因此在设计行键时应该让经常被查询的热点数据分散在不同的region中,防止某一个或某几个regionserver成为热点。 - 有序原则:
行键的设计将会影响数据在hbase表中的排序方式,所以常见的一种策略是通过设计行键将将经常连续查询的数据排列在一起,这样一来可以方便批量查询。