行式存储和列式存储

传统数据库大多基于行(Row-based)实现数据存储,即一行行的记录。此类存储结构对大多数的传统数据工作都是非常有效的,下面我们先来回顾一下数据库系统中数据工作的概念:
-在线事务处理(OLTP)
OLTP是传统数据工作的主要应用,主要是基本的、日常的事务处理,即插入、修改、查询和删除等操作。
-在线分析处理(OLAP)
OLAP是数据分析和数据挖掘工作的主要应用。OLAP支持复杂的分析操作,侧重决策支持并提供直观易懂的查询结果。
  在Row-based数据库中,一行记录中的每一列都是紧挨着另一列存放在硬盘中的,行之间也成线性存储。这样的模式十分适用于OLTP工作,由于每次操作对象都是某几行记录,每次查询只需要从硬盘中加载最少的数据。
  OLAP更倾向于访问百万、千万甚至上亿条记录。传统的行式存储(Row-oriented Storage)使得我们需要花费时间加载每一行,而真正需要的数据可能仅是每行中的几个数据列而已。如果存储结构基于列(Column-based),那么单列查询就只需要加载硬盘中的最小列块,这种方式在磁盘IO上是比较高效的。正是如此,我们可以说OLAP促成了列式存储(Columnar Storage)的出现。
  下图展示了Row-oriented Storage和Columnar Storage的原理:
在这里插入图片描述
  当然,列式存储也并非万能。单纯给Column-based数据表加索引,并不能使其在OLTP工作流上表现高效。就删改记录等需求而言,查询任务需要加载磁盘中的很多列块才能整合一条完整的记录。如果一个数据表的列项过于丰富,那么Columnar Storage反而会加重OLTP工作流的磁盘I/O负载。相比而言,Row-oriented Storage则更适合对单一整行记录的处理。
  如何选择存储结构取决于你的企业对OLTP/OLAP业务的需求。目前还有一些行列混合存储技术结合了两种架构的优势。例如针对Columnar Storage提出的列组(Column Group)概念,多个列形成一个组。如果访问的列属于同一组,查询工作流就可以避免多个数据列的合并。这种结构能够同时满足OLTP和OLAP的查询需求。
  Columnar Storage从一开始就是面向大数据环境下数据仓库的数据分析而产生的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值