列式数据库和行式数据库区别

列式存储(Column-based)是相对于传统关系型数据库的行式存储(Row-based)来说的。简单来说两者的区别就是如何组织表。

行式存储

传统的数据库是关系型的,按行来存储(二维表)数据,如下图:

其中,只有张三把一行数据填满了,李四王五赵六都没有填满。因为这里的行结构是固定的,每一行都一样,即使你不用,也必须要空到哪里,而不能没有。

列式存储

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

原来张三的一列(单元格)数据对应现在张三的一行数据,原来张三的六列数据对应现在张三的六行数据。原来的六列数据是在一行,所以共用一个主键(即张三)。现在变成了六行数据,每行数据都需要一个主键(不然不知道这行数据是谁的),所以原来的主键(即张三的唯一标识)重复了六次。

由于原来的列变成了现在的行,有需要就加一行,没需要就不加,这样就不会造成空间的浪费。

行式存储和列式存储的区别

1.行式存储倾向于结构固定,列式存储倾向于结构弱化。

2.行式存储存储一行数据仅需要一个主键,列式存储存储一行数据需要多份主键。

3.列式存储存储的都是业务数据,而列式存储除了业务数据之外,还需要存储列名。

4.行式存储更像是一个Java Bean,所有的字段都提前定义好,且不能改变;列式存储更像是一个Map,不提前定义,随意往里面添加key/value。

行式数据库:
1.数据是按行存储的
2.没有建立索引的查询将消耗很大的io
3.建立索引和视图需要花费一定的物理空间和时间资源
4.面对大量的查询,复杂的查询,数据库必须被大量膨胀才能满足性能需求
列式数据库:
1.数据是按列存储的,每一列单独存放
2.数据既是索引
3.只访问查询涉及的列,大量降低系统io
4.每一列有一个线索来处理,支持查询的高并发
5.数据类型一致,数据特征相似,高效的压缩
为什么可以大量降低系统io:
比如查询表中所有人的名字;行式数据库需要查询所有行,列式数据库只需要查询name列.
行式与列式数据库优缺点:
根据实际的业务场景来选择对应的数据库系统.传统的crud操作应用适合行式数据库(表之间有关联关系);列式数据库适用于数据仓库,数据分析,海量存储,涉及到不经常更新的数据库,列式在并行查询,压缩上更有优势.

应用场景

在比较了行式数据库与列式数据库之后,我们更关心的是如何根据业务场景需要选择对应的数据库系统。

行式更适合OLTP,比如传统的基于增删改查操作的应用。列式更适合OLAP,非常适合于在数据仓库领域发挥作用,比如数据分析、海量存储和商业智能;涉及不经常更新的数据。

由于设计上的不同,列式数据库在并行查询处理和压缩上更有优势。而且数据是以列为单元存储,完全不用考虑数据建模或者说建模更简单了。要查询计算哪些列上的数据,直接读取列就行。

最后我们需要务实的指出,没有万能的数据库,列式数据库也并非万能,只不过给DBA提供了更多的选择,DBA需根据自己的应用场景自行选择。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值