HBase的列式存储
为什么要选择列式存储 行式存储和列式存储主要是在物理存储的选择上面,这里主要是选择从实体的完整性角度进行存储,还是从实体特征维度进行存储,行式存储就是以实体为单位进行存储,在物理存储上,一个实体(的特征属性)紧挨着另外一个实体;列式存储就是从实体特征维度进行存储,通常是以列为物理存储单元,这种存储模式也决定了查询的模式也是基于列取查询;所以,当我们想要按照实体去查询列式存储的数据,一般都是需要并行查询,所以列式存储天生的是分布式数据库的架构。 在OLTP场景,更多的基于实体的维护和查询,但是在OLAP场景,则是更多地从实体特征角度进行数据处理(统计),所以在OLAP的场景下,如果还是使用行式存储,会导致大量的无谓的遍历,比如想要对某个列进行所有数据的统计,因为是行式存储,需要遍历所有的实体的所有的属性;如果列式存储,则只需要按照列进行查询即可,因为列式存储是以列一个物理存储单元,所以遍历只要遍历相应列的物理存储文件即可。 那么从这个角度上面来讲,HBase其实是行列存储的一个综合体,从宏观角度是按照列簇为单位进行存储,从微观角度,每一个列簇的单元是由key,value的键值对组成(可能是很多歌键值对,因为一个列簇可以包含很多列),但是values其实是行式存储,另外HBase并不建议采用度过列簇,列簇不要超过2个,所以列式存储的优势并没有完全发挥出来