终于搞懂了啥是列存储,啥是行存储
作者:互联网
行式存储VS 列式存储
行式存储
传统的数据库是关系型的,且是按行来存储的。如下图
行式存储示意图观察上图,我们不难发现:因为每个人学历不一样的原因,只有张三一个人将整行数据都填满了,李四、王五、赵六的数据都没有将对应的行填满。因为这里的行结构是固定的,每一行都一样,即使你不用,也必须空到那里,而不能没有,而这样的空行也是需要占用一定的存储空间的,如果这样的空行占比较大,势必带来较大的存储空间的浪费,那么是否有什么好的解决办法么?
列式存储
为了与传统的区别,新型数据库叫做非关系型数据库,是按列来存储的。如下图:
列式存储示意图下面给出行存储与列存储的映射关系:
原来张三的一列(单元格)数据对应现在张三的一行数据。原来张三的六列数据变成了现在的六行。
原来的六列数据是在一行,所以共用一个主键(即张三)。现在变成了六行,每行都需要一个主键(不然不知道这行数据是谁的),所以原来的主键(即张三)重复了六次。如下图:
行存储与列存储的映射关系相当于将每一行的每一列拆开,然后通过rowkey(行唯一键)关联起来,rowkey相同的这些数据其实就是原来的一行。由于原来的列变为了现在的行,有需要就加一行,没需要就不加,有效地减少了存储空间的浪费。
行存储与列存储的对比
- 行式存储倾向于结构固定,列式存储倾向于结构弱化。
(行式存储相当于套餐,即使一个人来了也给你上八菜一汤,造成浪费;列式存储相等于自助餐,按需自取,人少了也不浪费) - 行式存储一行数据只需一份主键,列式存储一行数据需要多份主键。
- 行式存储存的都是业务数据,列式存储除了业务数据外,还要存储列名。
- 行式存储更像一个Java Bean,所有字段都提前定义好,且不能改变;列式存储更像一个Map,不提前定义,随意往里添加key/value。
作者:GeekerLou
链接:https://www.jianshu.com/p/603113588144
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
标签:存储,列式,行式,一行,终于,搞懂,数据,主键 来源: https://www.cnblogs.com/WaitSani/p/15057642.html