本篇结构:
- 宽表和高表定义
- 宽表和高表的优劣
- 宽表和高表的应用场景
一、宽表和高表定义
HBase 中的表可以设计为高表(tall-narrow table) 和 宽表(flat-wide table):
- 宽表是指很多列较少行,即列多行少的表,一行中的数据量较大,行数少;
- 高表是指很多行较少列,即行多列少,一行中的数据量较少,行数大。
二、宽表和高表的优劣
HBase的键分为两种:
- 列键:包括了列族名和限定符,定位到列的索引
- 行健:相当于关系型数据库中的主键,通过行健得到逻辑布局中一行的所有列
由于列键是由列族名和限定符组成的,属于定位具体 StoreFile 的,所以应该将需要查询的维度或者信息存储在 row key 中,因为用它来筛选数据效率最高!
Hbase 的 row key 是分布式的索引,也是分片的依据。Hbase 的 row key + column family + column qualifier + timestamp + value 是 HFile 中数据排列依据。
据此,在HBase中使用宽表、高表的优劣总结如下:
- 查询性能:高表查询更好,因为查询条件都在 row key 中,是全局分布式索引的一部分。高表一行中的数据较少。所以查询缓存 BlockCache 能缓存更多的行,以行数为单位的吞吐量