数据库为什么会分为“行式存储”和“列式存储”呢?

我们知道

当今的数据处理大致可分为两大类

联机事务处理 OLTP

(on-line transaction processing)

以及联机分析处理 OLAP

(On-Line Analytical Processing)

OLTP 是传统关系型数据库的主要应用

用来执行一些基本的、日常的事务处理

比如数据库记录的增、删、改、查等等

而 OLAP 则是分布式数据库的主要应用

它对实时性要求不高,但处理的数据量大

通常应用于复杂的动态报表系统上

OLTP与OLAP的主要区别

OLTP与OLAP

在数据库的应用类别方面

为何会出现显著差别呢?

其实,这是因数据库存储模式不同而造成的

行式存储和列式存储

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

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

行式存储的适用场景包括:

1、适合随机的增删改查操作;

2、需要在行中选取所有属性的查询操作;

3、需要频繁插入或更新的操作,其操作与索引和行的大小更为相关。

实操中我们会发现

行式数据库在读取数据的时候

会存在一个固有的“缺陷”

比如,所选择查询的目标即使只涉及少数几项属性

但由于这些目标数据埋藏在各行数据单元中

而行单元往往又特别大

应用程序必须读取每一条完整的行记录

从而使得读取效率大大降低

对此,行式数据库给出的优化方案是加“索引”

在OLTP类型的应用中

通过索引机制或给表分区等手段

可以简化查询操作步骤,并提升查询效率

但针对海量数据背景的OLAP应用

(例如分布式数据库、数据仓库等等)

行式存储的数据库就有些“力不从心”了

行式数据库建立索引和物化视图

需要花费大量时间和资源

因此还是得不偿失

无法从根本上解决查询性能和维护成本等问题

也不适用于数据仓库等应用场景

所以后来出现了基于列式存储的数据库

对于数据仓库和分布式数据库来说

大部分情况下它会从各个数据源汇总数据

然后进行分析和反馈

其操作大多是围绕同一列属性的数据进行的

而当查询某属性的数据记录时

列式数据库只需返回与列属性相关的值

在大数据量查询场景中

列式数据库可在内存中高效组装各列的值

最终形成关系记录集

因此可以显著减少IO消耗

并降低查询响应时间

非常适合数据仓库和分布式的应用

列式存储引擎的适用场景包括:1、查询过程中,可针对各列的运算并发执行(SMP),最后在内存中聚合完整记录集,最大可能降低查询响应时间;

2、可在数据列中高效查找数据,无需维护索引(任何列都能作为索引),查询过程中能够尽量减少无关IO,避免全表扫描;

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

当然,跟行数据库一样

列式存储也有不太适用的场景

主要包括:

数据需要频繁更新的交易场景

表中列属性较少的小量数据库场景

不适合做含有删除和更新的实时操作

随着列式数据库的发展,传统的行式数据库加入了列式存储的支持,形成具有两种存储方式的数据库系统。例如,随着Oracle 12c推出了in memory组件,使得Oracle数据库具有了双模式数据存放方式,从而能够实现对混合类型应用的支持,当然列式数据库也有对行式存储的支持比如HP Vertica。总之,没有万能的数据库,一切都要以实际的数据存储和分析需求为准!

原文地址:https://www.cnblogs.com/syncnavigator/p/10198308.html

时间: 2024-08-01 10:46:20

数据库为什么会分为“行式存储”和“列式存储”呢?的相关文章

ALV的颜色分为行的颜色、列的颜色和CELL的颜色

ALV的颜色分为行的颜色.列的颜色和CELL的颜色.任务要求,将一定的Tabellenfeld 用黄色填充,也就是说CELL的颜色 DATA:ls_cellcolorTYPElvc_s_scol,coltabTYPElvc_t_scol,colorTYPElvc_s_colo. DATA: BEGIN OFfield_struc, " 在表格结构中定义颜色            ....           CELLCOLORTYPElvc_t_scol,END OFfield_struc.vi

列式数据库与行式数据库分析

1,行式数据库 定义:存储格式按照'行'的方式把一行各个字段的数据存储在一起,一行行连续存储. 图 1 把一条数据的信息写到数据库中:或者对一条数据中的某些字段进行修改:或者删除整条数据一类的OLTP操作来说既直观也高效. 但是,在行式数据库上做一些报表.分析的时候,大家又发现这种存储格式使用效率不高.例如:统计各省份的销售额和利润同比变化:按照部门统计业绩完成情况等等,都是在其中某些字段上的操作,行式数据库不分情况一律按照页面读取数据的方式,在只分析销售额和利润的时候,把每一份合同的其他信息,

行存储和列存储

传统的行式数据库将一个个完整的数据行存储在数据页中.这种方式在大数据量查询的时候会出现以下问题 1.在没有索引的情况下,会把一行全部查出来,查询会使用大量IO 2.虽然建立索引和物化视图可以可以快速定位列,但是也需要花费大量时间 但是如果处理查询时需要用到大部分的数据列,这种方式在磁盘IO上是比较高效的. 一般来说,OLTP(Online Transaction Processing,联机事务处理)应用适合采用这种方式. 一个OLAP类型的查询可能需要访问几百万甚至几十亿个数据行,且该查询往往只

内存列式存储 vs Buffer Cache

Oracle DB 12c的In-Memory选项(DBIM)将表中列的所有行的数据载入内存,为何不能像Buffer Cache那样只把频繁访问的数据块置入内存中呢? 内存列式存储和Buffer Cache的访问模式 原因是两者支持的访问模式不同,对于Buffer Cache,支持的是OLTP应用,访问模式为non-uniform access patterns,也就是说表中的某些行访问比其它行频繁,因此才能通过只缓存10%的数据,就可以涵盖95%的数据访问.可以假设缓存10%的数据就可以得到2

行存储 VS 列存储

概述 目前大数据存储有两种方案可供选择:行存储(Row-Based)和列存储(Column-Based).业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全.可靠.完整性.从目前发展情况看,关系数据库已经不适应这种巨大的存储量和计算要求,基本是淘汰出局.在已知的几种大数据处理软件中,Hadoop的HBase采用列存储,MongoDB是文档型的行存储,Lexst是二进制型的行存储. 什么是列存储? 列式存储(column-based)是相对于传统关系型数据库的行式存储

浅析列式数据库的特点

转自: http://www.searchdatabase.com.cn/showcontent_61985.htm  最早的商业列式数据库是在1995年发布的Sybase IQ,但是一直到1999年左右才慢慢稳定到能够投入生产环境.现在的大多数分析型数据库都是在2003-2005年从Postgresql 分支出来的.其中尤其是Vertica 为代表的列数据库已经在大规模数据仓库环境中证明其特别为数据仓库环境设计的思路在一些领域具有竞争优势.这篇文章解释介绍列式数据库的几大特点. 高效的储存空间

开源列式存储引擎Parquet和ORC

转载自董的博客 相比传统的行式存储引擎,列式存储引擎具有更高的压缩比,更少的IO操作而备受青睐(注:列式存储不是万能高效的,很多场景下行式存储仍更加高效),尤其是在数据列(column)数很多,但每次操作仅针对若干列的情景,列式存储引擎的性价比更高. 在互联网大数据应用场景下,大部分情况下,数据量很大且数据字段数目很多,但每次查询数据只针对其中的少数几行,这时候列式存储是极佳的选择,目前在开源实现中,最有名的列式存储引擎是Parquet和ORC,在最近一年内,它们都晋升为Apache顶级项目,可

Parquet与ORC:高性能列式存储格式(收藏)

背景 随着大数据时代的到来,越来越多的数据流向了Hadoop生态圈,同时对于能够快速的从TB甚至PB级别的数据中获取有价值的数据对于一个产品和公司来说更加重要,在Hadoop生态圈的快速发展过程中,涌现了一批开源的数据分析引擎,例如Hive.Spark SQL.Impala.Presto等,同时也产生了多个高性能的列式存储格式,例如RCFile.ORC.Parquet等,本文主要从实现的角度上对比分析ORC和Parquet两种典型的列存格式,并对它们做了相应的对比测试. 列式存储 由于OLAP查

Parquet与ORC:高性能列式存储格式

背景 随着大数据时代的到来,越来越多的数据流向了Hadoop生态圈,同时对于能够快速的从TB甚至PB级别的数据中获取有价值的数据对于一个产品和公司来说更加重要,在Hadoop生态圈的快速发展过程中,涌现了一批开源的数据分析引擎,例如Hive.Spark SQL.Impala.Presto等,同时也产生了多个高性能的列式存储格式,例如RCFile.ORC.Parquet等,本文主要从实现的角度上对比分析ORC和Parquet两种典型的列存格式,并对它们做了相应的对比测试. 列式存储 由于OLAP查