关于hadoop:HBase到底是列式存储还是行式存储

99次阅读

共计 618 个字符,预计需要花费 2 分钟才能阅读完成。

逻辑概念上,数据库表是一种二维的数据结构,具备行和列。但在内存、磁盘等物理存储上,数据个别是须要线性程序组织的。所以为了存储数据库表中的数据,有了两种常见的组织形式:基于行的存储和基于列的存储。

基于行的存储,是将整行数据间断存在一起。在基于行存储的表中,即便只须要读取指定列时,也须要先将对应行的数据读取到内存,而后再过滤指标列,这样会导致过多的磁盘 IO、内存和工夫开销,所以行式存储比拟实用于每次须要拜访残缺行的场景。

基于列的存储,是将列数据间断存储在一起。因为是将雷同类型的数据存储在了一起,往往压缩比比拟高,从而也会升高磁盘 IO、内存和工夫开销,所以,列式存储实用于仅在单列或多数列上操作的场景。特地是在大数据时代,数据的列和行都比拟多时候,列式存储劣势会更加显著。但反过来,列式存储对于获取整行的申请效率就没那么高了,须要屡次 IO 读取多个列的数据,而后再合并返回。

HBase 表数据模型比拟特地,也能够简略了解为有行和列的二维表,只是它的列称为“列族”,列族上面又能够在数据写入时指定很多的子列。另外,HBase 物理存储上是将整个列族数据存储在一起的。所以,如果 HBase 中的一张表只有一个列族的话,等于是这个列族蕴含了这张表的所有列,也就是将表正行的数据间断存储在了一起,就等于是行式存储了。再比方,一张表有多个列族,并且每个列族下仅有一列(尽管 HBase 不倡议这么做),也就是将表的列数据间断存储在了一起,就等于是列式存储了。

正文完
 0