美文网首页
行式存储VS列式存储

行式存储VS列式存储

作者: GeekerLou | 来源:发表于2020-07-05 10:35 被阅读0次

    引言

    很多人刚开始学习数据库的时候可能接触到的都是关系型数据库RDS,它是基于行式存储的思想来进行数据存储的;但是数据库存储领域还有一个不容小觑的力量,非关系型数据库NoSQL,其中一部分NoSQL数据库是采用了列式存储的思想,那么我们不禁发问,行式存储和列式存储到底有什么区别?什么样的场景下列式存储类型的数据库更加适用呢?

    今天这篇文章我们就来探究一下行式存储和列式存储的区别和联系。

    行式存储VS 列式存储

    行式存储

    传统的数据库是关系型的,且是按行来存储的。如下图

    行式存储示意图

    观察上图,我们不难发现:因为每个人学历不一样的原因,只有张三一个人将整行数据都填满了,李四、王五、赵六的数据都没有将对应的行填满。因为这里的行结构是固定的,每一行都一样,即使你不用,也必须空到那里,而不能没有,而这样的空行也是需要占用一定的存储空间的,如果这样的空行占比较大,势必带来较大的存储空间的浪费,那么是否有什么好的解决办法么?

    列式存储

    为了与传统的区别,新型数据库叫做非关系型数据库,是按列来存储的。如下图:

    列式存储示意图

    下面给出行存储与列存储的映射关系:

    原来张三的一列(单元格)数据对应现在张三的一行数据。原来张三的六列数据变成了现在的六行。

    原来的六列数据是在一行,所以共用一个主键(即张三)。现在变成了六行,每行都需要一个主键(不然不知道这行数据是谁的),所以原来的主键(即张三)重复了六次。如下图:

    行存储与列存储的映射关系

    相当于将每一行的每一列拆开,然后通过rowkey(行唯一键)关联起来,rowkey相同的这些数据其实就是原来的一行。由于原来的列变为了现在的行,有需要就加一行,没需要就不加,有效地减少了存储空间的浪费。

    行存储与列存储的对比

    • 行式存储倾向于结构固定,列式存储倾向于结构弱化。
      (行式存储相当于套餐,即使一个人来了也给你上八菜一汤,造成浪费;列式存储相等于自助餐,按需自取,人少了也不浪费)
    • 行式存储一行数据只需一份主键,列式存储一行数据需要多份主键。
    • 行式存储存的都是业务数据,列式存储除了业务数据外,还要存储列名。
    • 行式存储更像一个Java Bean,所有字段都提前定义好,且不能改变;列式存储更像一个Map,不提前定义,随意往里添加key/value。

    相关文章

      网友评论

          本文标题:行式存储VS列式存储

          本文链接:https://www.haomeiwen.com/subject/auomqktx.html