0. 前言

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

1. 概念介绍

行式存储(Row-basedstorage)常用于传统的关系型数据库。列式存储(column-based)是相对于行式存储说的。

行式存储:按行顺序存储表

列式存储:按列顺序存储表

两种存储的数据都是从上至下,从左向右的排列。行是列的组合,行存储以一行记录为单位,列存储以列数据集合单位,或称列族(column family)。行存储的读写过程是一致的,都是从第一列开始,到最后一列结束。列存储的读取是列数据集中的一段或者全部数据,写入时,一行记录被拆分为多列,每一列数据追加到对应列的末尾处。

2. 对比分析

行存储和列存储的差异主要在数据写入和数据读取上,差别如下:

写入逻辑

(cud增改删)

读取逻辑

(r 检索查询)

优势 劣势 应用场景
行存储

写入是一次完成的,因此写入结果只有成功、失败两种结果

数据修改时,在指定位置写入一次。

将一列数据完全读出,如果需要其中几列的数据,就会存在冗余列,出去缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。

  1. 写入时可以保证数据的完整性;
  2. 写入时的性能比列存储高,消耗时间更少。
  1. 数据读取过程中会产生冗余数据;
  2. 数据解析比较复杂,因为每一行记录中保存了多种类型的数据,数据解析需要在多种数据类型之间频繁转换,很消耗CPU。

对写入性能、写入完整性要求比较高,但是对查询性能要求不高的场景。

主要是OLTP 操作型数据库。

列存储

需要把一行记录拆分成单列保存,写入次数明显比行存储多。

数据修改时,将磁盘定位到多个列上分别写入。

每次读取的数据是集合的一段或者全部,不存在冗余问题。

  1. 数据读取过程不会产生冗余数据;
  2. 数据解析会比较容易,每一列数据类型是同质的,不存在二义性问题,比如某列数据是整型(int),那么它的数据集合一定是整型;
  3. 列存储的数据,压缩时有很大的优势,主要是同一个数据列的数据重复度比较高。
  1. 写入时不能完全保证数据的完整性;
  2. 写入时的性能比列存储低。

对写入性能、写入完整性要求不高,但是对查询性能要求很高的场景。

主要是OLAP 分析型数据库。

3. 如何改进

行存储和列存储都有其各自的缺点,假如我们希望能够使用某一种方式,但是又涉及到一些他们劣势方面的场景应用,那么该如何优化。

优化思路:行存储读取过程中避免产生冗余数据,列存储提高写入效率和数据完整性。

  • 行存储的改进:减少冗余数据

1、首先是用户在定义数据时避免冗余列的产生;

2、其次是优化数据存储记录结构,保证从磁盘读出的数据进入内存后,能够被快速分解,消除冗余列。

  • 列存储的改进:提高写入效率和数据完整性

1、在计算机上安装多块硬盘,以多线程并行的方式读写它们。多块硬盘并行工作可以减少磁盘读写竞用,这种方式对提高处理效率优势十分明显。缺点是需要更多的硬盘,这会增加投入成本,在大规模数据处理应用中是不小的数目。

2、考虑在写入过程中加入类似关系数据库的“回滚”机制,当某一列发生写入失败时,此前写入的数据全部失效,同时加入散列码校验,进一步保证数据完整性。

这两种存储方案还有一个共同改进的地方:频繁的小量的数据写入对磁盘影响很大,更好的解决办法是将数据在内存中暂时保存并整理,达到一定数量后,一次性写入磁盘,这样消耗时间更少一些。目前机械磁盘的写入速度在 20M-50M/ 秒之间,能够以批量的方式写入磁盘,效果也是不错的。

参考资料:

行存储 VS 列存储

大数据存取的选择:行存储还是列存储?

数仓知识10:数据库存储的两种方式-行存储和列存储相关推荐

  1. 国产化之 .NET Core 操作达梦数据库DM8的两种方式

    Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https ...

  2. SqlServer2008 数据库同步的两种方式(Sql JOB)

    数据库同步是一种比较常用的功能.以下结合我自己的体会整理的,如果有理解不完全或者有误的地方望大牛不理赐教.下面介绍的就是数据库同步的两种方式: 1.SQL JOB的方式  sql Job的方式同步数据 ...

  3. SQL SERVER 2000 数据库备份和SQL Server数据库备份有两种方式,

    SQL SERVER 2000 数据库备份与还原时间:2006-08-30 10:23:23  来源:CSDN  作者:佚名备份数据库,例如: BACKUP DATABASE Northwind    ...

  4. 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...

    java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...

  5. SQL Server 2008 数据库同步的两种方式 (发布、订阅)

    参考转载: SQL Server 2008 数据库同步的两种方式 (发布.订阅) 使用Sqlserver事务发布实现数据同步 转载于:https://www.cnblogs.com/YangBinCh ...

  6. PageRank、图计算、图存储的两种方式

    目录 PageRank 什么是PageRank? 算法原理 入链 ====投票 入链数量 入链质量 网络上各个页面的连接图 计算过程 初始值 迭代递归计算(收敛) 图存储的两种方式 代码实现 Page ...

  7. Code First02---CodeFirst配置实体与数据库映射的两种方式

    Code First有两种配置数据库映射的方式,一种是使用数据属性DataAnnotation,另一种是Fluent API. 这两种方式分别是什么呢?下面进行一一解释: DataAnnotation ...

  8. 多维数组存储的两种方式

    1 数组存储的要求 数组存储的要求:连续存储. 连续:数组的n个元素对应n(或n+1)个内存地址,两相邻元素的地址相邻. 相邻元素:对于一维数组来说,相邻元素没有多大的选择,就是下标差绝对值为1的两元 ...

  9. Springboot中数据库访问的两种方式之-JdbcTemplate

    目录 01.写在前面 02.项目依赖 03.创建模型脚本 04.读取数据库 05.Controller 06.开始测试 本文由bingo创作,授权我原创发布. Tiger和他朋友们的原创技术文章,请关 ...

最新文章

  1. python基础 继承
  2. linux下 发布qt程序,Linux下发布qt程序
  3. ONVIF协议实现1:Server端Discovery的实现详解
  4. 摇一摇事件封装了设备的运动传感器
  5. 翁恺java答案第五周_[JAVA]翁恺老师零基础学java语言第五周素数例题中continue的困惑...
  6. 如何向某网址Post信息,并得到CookieContainer以便以后直接通过验证
  7. USB 重定向库usbredir的移植到Android下使用的方法总结
  8. silvaco的石墨烯fet仿真_高灵敏度表面等离子体光纤传感器仿真设计(二)
  9. UESTC 1634 去年春恨却来时,落花人独立,微雨燕双飞
  10. 利用费马小定理进行素性测试
  11. 交换机、路由器和防火墙的原理和区别
  12. LODOP打印控件使用问题总结
  13. 用户文件下载服务解决方案
  14. python利用有道词典翻译_Python利用有道词典接口制作即时翻译的工具
  15. Docker容器热迁移技术(基于CRIU实现)
  16. 索爱j10 java,张崇:索爱J10怎么样呢?
  17. 长文本口语语义理解技术系列①:段落分割实践
  18. Java+MySQL实现药品销售管理系统
  19. matlab对信号包络的两种画法
  20. 虚拟仿真测试介绍(9):硬件在环(HIL)测试简介

热门文章

  1. 恢复专家详解.malox勒索病毒对数据库文件的加密方式和解决方案
  2. OBD和WWH-OBD接口的外部测试设备的需求
  3. 使用redis 报错Address already in use redis无法启动问题 oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  4. 论文解读:Taking A Closer Look at Domain Shift: Category-level Adversaries for Semantics Consistent
  5. 心得| 想入行 AI,别让那些技术培训坑了你...
  6. ubuntu16.04安装cuda9——简明教程
  7. 苹果10.15.4 系统先别更新!!!
  8. IDC:今年全球智能手机出货量将连续第三年出现下滑
  9. juicer无法正常渲染出结果
  10. 树莓派:解决4B升级到Bullseye后xrdp不响应的问题