数仓知识10:数据库存储的两种方式-行存储和列存储
0. 前言
目前大数据存储主要有两种方案可供选择:行存储(Row-Based)和列存储(Column-Based)。业界对两种方案有许多争持,争论的焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从目前发展情况看,关系数据库已经不适应这种巨大的存储量和计算要求,基本是淘汰出局。在已知的几种大数据处理软件中,Hadoop的HBase采用列存储,MongoDB是文档型的行存储,Lexst是二进制型的行存储。
1. 概念介绍
行式存储(Row-basedstorage)常用于传统的关系型数据库。列式存储(column-based)是相对于行式存储说的。
行式存储:按行顺序存储表
列式存储:按列顺序存储表
两种存储的数据都是从上至下,从左向右的排列。行是列的组合,行存储以一行记录为单位,列存储以列数据集合单位,或称列族(column family)。行存储的读写过程是一致的,都是从第一列开始,到最后一列结束。列存储的读取是列数据集中的一段或者全部数据,写入时,一行记录被拆分为多列,每一列数据追加到对应列的末尾处。
2. 对比分析
行存储和列存储的差异主要在数据写入和数据读取上,差别如下:
写入逻辑 (cud增改删) |
读取逻辑 (r 检索查询) |
优势 | 劣势 | 应用场景 | |
---|---|---|---|---|---|
行存储 |
写入是一次完成的,因此写入结果只有成功、失败两种结果 数据修改时,在指定位置写入一次。 |
将一列数据完全读出,如果需要其中几列的数据,就会存在冗余列,出去缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。 |
|
|
对写入性能、写入完整性要求比较高,但是对查询性能要求不高的场景。 主要是OLTP 操作型数据库。 |
列存储 |
需要把一行记录拆分成单列保存,写入次数明显比行存储多。 数据修改时,将磁盘定位到多个列上分别写入。 |
每次读取的数据是集合的一段或者全部,不存在冗余问题。 |
|
|
对写入性能、写入完整性要求不高,但是对查询性能要求很高的场景。 主要是OLAP 分析型数据库。 |
3. 如何改进
行存储和列存储都有其各自的缺点,假如我们希望能够使用某一种方式,但是又涉及到一些他们劣势方面的场景应用,那么该如何优化。
优化思路:行存储读取过程中避免产生冗余数据,列存储提高写入效率和数据完整性。
- 行存储的改进:减少冗余数据
1、首先是用户在定义数据时避免冗余列的产生;
2、其次是优化数据存储记录结构,保证从磁盘读出的数据进入内存后,能够被快速分解,消除冗余列。
- 列存储的改进:提高写入效率和数据完整性
1、在计算机上安装多块硬盘,以多线程并行的方式读写它们。多块硬盘并行工作可以减少磁盘读写竞用,这种方式对提高处理效率优势十分明显。缺点是需要更多的硬盘,这会增加投入成本,在大规模数据处理应用中是不小的数目。
2、考虑在写入过程中加入类似关系数据库的“回滚”机制,当某一列发生写入失败时,此前写入的数据全部失效,同时加入散列码校验,进一步保证数据完整性。
这两种存储方案还有一个共同改进的地方:频繁的小量的数据写入对磁盘影响很大,更好的解决办法是将数据在内存中暂时保存并整理,达到一定数量后,一次性写入磁盘,这样消耗时间更少一些。目前机械磁盘的写入速度在 20M-50M/ 秒之间,能够以批量的方式写入磁盘,效果也是不错的。
参考资料:
行存储 VS 列存储
大数据存取的选择:行存储还是列存储?
数仓知识10:数据库存储的两种方式-行存储和列存储相关推荐
- 国产化之 .NET Core 操作达梦数据库DM8的两种方式
Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https ...
- SqlServer2008 数据库同步的两种方式(Sql JOB)
数据库同步是一种比较常用的功能.以下结合我自己的体会整理的,如果有理解不完全或者有误的地方望大牛不理赐教.下面介绍的就是数据库同步的两种方式: 1.SQL JOB的方式 sql Job的方式同步数据 ...
- SQL SERVER 2000 数据库备份和SQL Server数据库备份有两种方式,
SQL SERVER 2000 数据库备份与还原时间:2006-08-30 10:23:23 来源:CSDN 作者:佚名备份数据库,例如: BACKUP DATABASE Northwind ...
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
- SQL Server 2008 数据库同步的两种方式 (发布、订阅)
参考转载: SQL Server 2008 数据库同步的两种方式 (发布.订阅) 使用Sqlserver事务发布实现数据同步 转载于:https://www.cnblogs.com/YangBinCh ...
- PageRank、图计算、图存储的两种方式
目录 PageRank 什么是PageRank? 算法原理 入链 ====投票 入链数量 入链质量 网络上各个页面的连接图 计算过程 初始值 迭代递归计算(收敛) 图存储的两种方式 代码实现 Page ...
- Code First02---CodeFirst配置实体与数据库映射的两种方式
Code First有两种配置数据库映射的方式,一种是使用数据属性DataAnnotation,另一种是Fluent API. 这两种方式分别是什么呢?下面进行一一解释: DataAnnotation ...
- 多维数组存储的两种方式
1 数组存储的要求 数组存储的要求:连续存储. 连续:数组的n个元素对应n(或n+1)个内存地址,两相邻元素的地址相邻. 相邻元素:对于一维数组来说,相邻元素没有多大的选择,就是下标差绝对值为1的两元 ...
- Springboot中数据库访问的两种方式之-JdbcTemplate
目录 01.写在前面 02.项目依赖 03.创建模型脚本 04.读取数据库 05.Controller 06.开始测试 本文由bingo创作,授权我原创发布. Tiger和他朋友们的原创技术文章,请关 ...
最新文章
- python基础 继承
- linux下 发布qt程序,Linux下发布qt程序
- ONVIF协议实现1:Server端Discovery的实现详解
- 摇一摇事件封装了设备的运动传感器
- 翁恺java答案第五周_[JAVA]翁恺老师零基础学java语言第五周素数例题中continue的困惑...
- 如何向某网址Post信息,并得到CookieContainer以便以后直接通过验证
- USB 重定向库usbredir的移植到Android下使用的方法总结
- silvaco的石墨烯fet仿真_高灵敏度表面等离子体光纤传感器仿真设计(二)
- UESTC 1634 去年春恨却来时,落花人独立,微雨燕双飞
- 利用费马小定理进行素性测试
- 交换机、路由器和防火墙的原理和区别
- LODOP打印控件使用问题总结
- 用户文件下载服务解决方案
- python利用有道词典翻译_Python利用有道词典接口制作即时翻译的工具
- Docker容器热迁移技术(基于CRIU实现)
- 索爱j10 java,张崇:索爱J10怎么样呢?
- 长文本口语语义理解技术系列①:段落分割实践
- Java+MySQL实现药品销售管理系统
- matlab对信号包络的两种画法
- 虚拟仿真测试介绍(9):硬件在环(HIL)测试简介
热门文章
- 恢复专家详解.malox勒索病毒对数据库文件的加密方式和解决方案
- OBD和WWH-OBD接口的外部测试设备的需求
- 使用redis 报错Address already in use redis无法启动问题 oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
- 论文解读:Taking A Closer Look at Domain Shift: Category-level Adversaries for Semantics Consistent
- 心得| 想入行 AI,别让那些技术培训坑了你...
- ubuntu16.04安装cuda9——简明教程
- 苹果10.15.4 系统先别更新!!!
- IDC:今年全球智能手机出货量将连续第三年出现下滑
- juicer无法正常渲染出结果
- 树莓派:解决4B升级到Bullseye后xrdp不响应的问题