zoukankan      html  css  js  c++  java
  • 行式存储和列式存储

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

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

     

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

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

       

         存储方式:

             

       

         

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

        

        查询流程:

           

        

          关键步骤如下:

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

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

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

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

               

  • 相关阅读:
    Mybatis实现数据的增删改查(CRUD)
    Spring MVC基础入门
    Swap in C C++ C# Java
    java和c#使用hessian通信
    基于Netty4的HttpServer和HttpClient的简单实现
    RabbitMQ的几种典型使用场景
    java多线程编程
    singleton pattern的推荐实现
    python多线程编程
    基于GMap.Net的地图解决方案
  • 原文地址:https://www.cnblogs.com/long-yuan/p/13552659.html
Copyright © 2011-2022 走看看