请稍侯

大数据行存储还是列存储?

28 November 2015

介绍数据行存储和列存储的优缺点

##目录

##简介

面向行的数据存储架构更适用于OLTP-频繁交互事务的场景;

面向列的数据存储架构更适用于OLAP-(如数据仓库)这样在海量数据((可能达到 terabyte规模))中进行有限复杂查询的场景。

###OLTP和OLAP介绍

数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。

OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。

OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;

OLAP 系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。

##行存储,列存储优缺点

###数据写入

**行存储**的写入是一次完成。如果这种写入建立在操作系统的文件系统上,可以保证写入过程的成功或者失败,因此数据的完整性可以确定。
**列存储**由于需要把一行记录拆分成单列保存,写入次数明显比行存储多,再加上磁头需要在盘片上移动和定位花费的时间,实际时间消耗会更大。
**所以,行存储在写入上占有很大的优势。**

###数据修改

数据修改,实际也是一次写入过程。不同的是,数据修改是对磁盘上的记录做删除标记。
**行存储**是在指定位置写入一次,
**列存储**是将磁盘定位到多个列上分别写入,这个过程仍是行存储的列数倍。
**所以,数据修改也是以行存储占优。**

###数据读取

数据读取时,
**行存储**通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,
出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。
**列存储**每次读取的数据是集合的一段或者全部,如果读取多列时,就需要移动磁头,再次定位到下一列的位置继续读取。
**所以,数据读取列存储占优。**

###数据分布

对于数据分布,
**列存储**的每一列数据类型是同质的,不存在二义性问题。
比如说某列数据类型为整型(int),那么它的数据集合一定是整型数据, 这种情况使数据解析变得十分容易。
**行存储**则要复杂得多,因为在一行记录中保存了多种类型的数据,数据解析需要在多种数据类型之间频繁转换,
这个操作很消耗CPU,增加了解析的时间。
**所以,列存储的解析过程更有利于分析大数据。**

##参考

大数据存储选择-行存储还是列存储

行存储和列存储的比较