https://www.jianshu.com/p/3d3950c9fb06

我们知道

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

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

当然,跟行数据库一样
列式存储也有不太适用的场景
主要包括:
数据需要频繁更新的交易场景
表中列属性较少的小量数据库场景
不适合做含有删除和更新的实时操作

“行式存储”和“列式存储”的区别相关推荐

  1. 行式数据和列式数据对比 存储压缩性能

    一.行式数据库和列式数据库的对比 1.存储比较 行式数据库存储在hdfs上式按行进行存储的,一个block存储一或多行数据.而列式数据库在hdfs上则是按照列进行存储,一个block可能有一列或多列数 ...

  2. 数据库—行式存储和列式存储

    1. 数据库的存储模式 1.1 关系型数据库 关系型数据库RDS(Relational Database Service),大部分为行式存储数据. 行式存储: 据以行相关的存储体系架构进行空间分配,主 ...

  3. 行式存储和列式存储的数据库

    定义 关系数据库采用的数据存储有两种方式:行式存储和列式存储(也被称为columnar或C-store) 行式存储 是按记录组织数据的数据库,将与记录相关联的所有数据彼此相邻地保存在内存中.面向行的数 ...

  4. Mysql框架<二> 行式存储与列式存储

    文章目录 数据处理场景分类 OLTP 联机事务处理 OLAP 联机分析处理 行式存储和列式存储 概念 特点 对比 数据处理场景分类 OLTP 联机事务处理 OLTP : on-line transac ...

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

    文章目录 存储方式 简单对比 列式存储和行式存储它们真正的区别 概述 四大优化策略详解 块遍历 压缩 延迟物化 隐式链接 总结 存储方式 行式存储就是每一行的所有数据存在一个block中,各个bloc ...

  6. 行式存储和列式存储优缺点和paruqet文件结构

    参考文章:行式存储和列式存储优缺点和paruqet文件结构 优缺点分析 列存储优点: 单列数据保存在一起,不同列分开存储,导致存下同样一个表需要更多的Block文件,看起来是更复杂了,但是基于列和列分 ...

  7. 五大存储模型关系模型、键值存储、文档存储、列式存储、图形数据

    五大存储模型关系模型.键值存储.文档存储.列式存储.图形数据 时间:2014-06-12 16:15来源:知行网www.zhixing123.cn 编辑:麦田守望者 昨天跟一同事讨论Sybase是不是 ...

  8. 行式数据库 VS 列式数据库

    行式数据库 VS 列式数据库 一   基本概念 1  行式数据库    http://zhusihu.blog.163.com/blog/static/178880235201102381753490 ...

  9. 行式数据库与列式数据库的对比

    导语:随着大数据的发展,现在出现的列式存储和列式数据库.它与传统的行式数据库有很大区别的. 正文: 行式数据库是按照行存储的,行式数据库擅长随机读操作不适合用于大数据.像SQL server,Orac ...

最新文章

  1. 电商618背后的那些技术事儿
  2. 土地利用转移矩阵图怎么做_土地利用转移矩阵生成的几种方法
  3. Redis Zrevrangebyscore 命令
  4. Bitcoin0.21版 公链开发(5) PHP集成到Apache中(windows平台)
  5. ROS中catkin_make编译输出的可执行文件在哪?
  6. Linux下C程序的可扩展性.
  7. idea 新建一个spring项目
  8. Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍
  9. 前端学习(2309):react之同级传值
  10. java 成员函数相互调用_java 深入理解内部类以及之间的调用关系
  11. 用cookiecutter快速构建机器学习项目结构
  12. 基于Linux命令行终端的ftp客户端程序
  13. kubernetes权威指南第五版_Java 微服务实用指南(二)
  14. 【转载】C++ ,C#数据类型对照
  15. 3.8 Spark 用户日志分析
  16. 我的记事本(VB6)
  17. STM32使用HAL库驱动W5500
  18. windows配置路由表办公网和外网自动切换
  19. python数据类型转换、将数值转换为以万为单位的数_如何把Excel表格中金额为元的数转换成以万元为单位...
  20. 拔丝芋头的Java学习日记---Day9

热门文章

  1. NAL单元的各种类型介绍
  2. DIV横向排列的方法:float/inline-block/flex
  3. 暗码了解牛奶的真正生产日期
  4. MPLS BGP 跨域(OptionA/B/C(一/二))
  5. ios微信小程序下拉刷新怎么配_[wx]微信小程序自定义下拉刷新
  6. 分享几款流行的医疗机器人
  7. itext7读取pdf 中文_如何把PDF转为Word?转换软件哪个好?
  8. minitorch系列记录——1. 环境安装和机器学习基础
  9. 关于drop out
  10. 米尔科技Zynq利用EMIO操作三色灯的linux驱动