行式存储和列式存储

传统的关系型数据库,如 Oracle、DB2、MySQL、SQL SERVER 等采用行式存储法(Row-based),在基于行式存储的数据库中, 数据是按照行数据为基础逻辑存储单元进行存储的, 一行中的数据在存储介质中以连续存储形式存在。

列式存储(Column-based)是相对于行式存储来说的,新兴的 Hbase、HP Vertica、EMC Greenplum 等分布式数据库均采用列式存储。在基于列式存储的数据库中, 数据是按照列为基础逻辑存储单元进行存储的,一列中的数据在存储介质中以连续存储形式存在。

 

列式存储,各列独立存储,且数据类型已知,可以针对该列的数据类型、数据量大小等因素动态选择压缩算法,以提高物理存储利用率;如果某一行的某一列没有数据,那在列存储时,就可以不存储该列的值,这将比行式存储更节省空间。

列式数据库可在内存中高效组装各列的值
最终形成关系记录集
因此可以显著减少IO消耗
并降低查询响应时间
非常适合数据仓库和分布式的应用

   

     存储方式:

         

   

     

  字典表压缩: 经过字典表进行数据压缩后,表中的字符串变成数字了

    

    查询流程:

       

    

      关键步骤如下:

    1.     去字典表里找到字符串对应数字(只进行一次字符串比较)。

    2.     用数字去列表里匹配,匹配上的位置设为1。

    3.     把不同列的匹配结果进行位运算得到符合所有条件的记录下标。

    4.     使用这个下标组装出最终的结果集

           

原文地址:https://www.cnblogs.com/long-yuan/p/13552659.html