数据库—行式存储和列式存储
1. 数据库的存储模式
1.1 关系型数据库
关系型数据库RDS(Relational Database Service),大部分为行式存储数据。
- 行式存储:
- 据以行相关的存储体系架构进行空间分配,主要适合与小批量的数据处理,常用于联机事务型数据处理。
- 不能满足后面三个需求:对数据库高并发读写要求,对海量数据的高效率存储和访问需求,对数据库高可扩展性和高可用性。
- 总结一句话: 不适合分布式、高并发和海量。
- Mysql, Oracle
1.2 非关系型数据库
非关系型数据库NoSQL,存储数据分为四大类型:
列存储:
- 列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。
- 特点:包括查询快,由于查询需要读取的blocks少;数据压缩比高,正因为同一类型的列存储在一起,Load快。 简化数据建模的复杂性。但是插入更新慢,不太适合数据老是变化,它是按列存储的。这时候你就知道它适做DSS(决策支持系统),BI的优秀选择,数据集市,数据仓库,它不适合OLTP(On-Line Transaction Processing)。
- 主要适合与批量数据处理和即时查询。
- Eg:Hbase, cassandra, Amazon Redshift
键值对存储
Key-Value存储,它的数据按照键值对的形式进行组织,索引和存储
键值对存储数据库结构是采用哈希函数来实现键到值的映射,当查询数据时,基于Key的哈希值会直接定位到数据所在的位置,实现快速查询,并支持海量数据的高并发查询。
KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能。
Eg: redis、DynamoDB
文档存储
文档存储以封包键值对的方式进行存储。在这种情况下,应用对要检索的封包采取一些约定,或者利用存储引擎的能力将不同的文档划分成不同的集合,以管理数据。
与关系模型不同的是,文档存储模型支持嵌套结构。例如,文档存储模型支持XML和JSON文档,字段的“值”又可以嵌套存储其它文档。文档存储模型也支持数组和列值键。
与键值存储不同的是,文档存储关心文档的内部结构。这使得存储引擎可以直接支持二级索引,从而允许对任意字段进行高效查询。
支持文档嵌套存储的能力,使得查询语言具有搜索嵌套对象的能力,XQuery就是一个例子。
Eg: MongoDB通过支持在查询中指定JSON字段路径实现类似的功能。
MongoDB
图形存储
图形存储数据库不是网络数据库,它是NoSQL数据库的一种类型,其主要是应用图形理论来存储实体之间的关系信息,其中,实体被视为图形的“节点”,关系被视为图形的“边”,“边”按照关系将“节点”按进行连接。
常见的图形存储数据库有 Neo4j、FlockDB、AllegroGrap以及GraphDB等数据库。
2、行存储VS列存储
区别优缺点:
行式存储 | 列式存储 | |
---|---|---|
一行表示一条记录,将表按行存储到磁盘分区上 | 将表按列存储到磁盘分区上,每一列单独存放。 | |
优点 |
1. 数据被保存在一起。 2. INSERT/UPDATE容易 |
1. 查询时只有涉及到的列会被读取 2. 投影很高效 3. 任何列都能成为索引 |
缺点 | 选择时即使只涉及某几列,所有数据也都会被读取 |
选择完成时,被选择的列要重新组装 INSERT/UPDATE比较麻烦 |
适用场景 |
1. 点查询(返回记录少,基于索引的简单查询) 2.增删改频繁的场景 |
1. 统计分析类查询 (OLAP,比如数据仓库业务,此类型的表上会做大量的汇聚计算,且涉及的列操作较少,关联、分组操作较多)。 2. 即时查询(查询条件不确定,行存表扫描难以使用索引)。 |
3、从磁盘角度分析
1. 行式存储查询的劣势
2. 列式存储查询的优势(顺序读)
3、列式存储数据压缩
列式存储是有利数据压缩的,同列的数据类型一致,有利于数据结构填充的优化和压缩。
下面中才是那张表本来的样子。经过字典表进行数据压缩后,表中的字符串才都变成数字了。正因为每个字符串在字典表里只出现一次了,所以达到了压缩的目的(有点像规范化和非规范化Normalize和Denomalize)
4、查询执行性能
我们可以通过一条查询的执行过程说明列式存储(以及数据压缩)的优点:
关键步骤如下:
1. 去字典表里找到字符串对应数字(只进行一次字符串比较)。
2. 用数字去列表里匹配,匹配上的位置设为1。
3. 把不同列的匹配结果进行位运算得到符合所有条件的记录下标。
4. 使用这个下标组装出最终的结果集。
数据库—行式存储和列式存储相关推荐
- 行式存储和列式存储的数据库
定义 关系数据库采用的数据存储有两种方式:行式存储和列式存储(也被称为columnar或C-store) 行式存储 是按记录组织数据的数据库,将与记录相关联的所有数据彼此相邻地保存在内存中.面向行的数 ...
- 行式数据和列式数据对比 存储压缩性能
一.行式数据库和列式数据库的对比 1.存储比较 行式数据库存储在hdfs上式按行进行存储的,一个block存储一或多行数据.而列式数据库在hdfs上则是按照列进行存储,一个block可能有一列或多列数 ...
- Mysql框架<二> 行式存储与列式存储
文章目录 数据处理场景分类 OLTP 联机事务处理 OLAP 联机分析处理 行式存储和列式存储 概念 特点 对比 数据处理场景分类 OLTP 联机事务处理 OLTP : on-line transac ...
- 行式存储和列式存储的区别
文章目录 存储方式 简单对比 列式存储和行式存储它们真正的区别 概述 四大优化策略详解 块遍历 压缩 延迟物化 隐式链接 总结 存储方式 行式存储就是每一行的所有数据存在一个block中,各个bloc ...
- 行式存储和列式存储优缺点和paruqet文件结构
参考文章:行式存储和列式存储优缺点和paruqet文件结构 优缺点分析 列存储优点: 单列数据保存在一起,不同列分开存储,导致存下同样一个表需要更多的Block文件,看起来是更复杂了,但是基于列和列分 ...
- “行式存储”和“列式存储”的区别
https://www.jianshu.com/p/3d3950c9fb06 我们知道 当今的数据处理大致可分为两大类 联机事务处理 OLTP (on-line transaction process ...
- 五大存储模型关系模型、键值存储、文档存储、列式存储、图形数据
五大存储模型关系模型.键值存储.文档存储.列式存储.图形数据 时间:2014-06-12 16:15来源:知行网www.zhixing123.cn 编辑:麦田守望者 昨天跟一同事讨论Sybase是不是 ...
- 数据库行式存储和列式存储的区别
假设我们有一张student数据表: name gender age score 张三 男 16 67 李四 女 18 98 王五 男 17 85 假设我们有一个磁盘,那么在经典的行式存储中,数据是怎 ...
- DataBase_数据库的行式存储与列式存储
存储差异 行式存储:以行为单位进行存储,存储在连续的物理内存上 列式存储:以列为单位进行存储,存储在连续的物理内存上 读取差异 animal表: name age color Tom one blue ...
最新文章
- paramiko基础
- [vue] 组件和插件有什么区别?
- 解决idea一直updating index
- mysql架构深入_mysql性能优化2:深入认识mysql体系架构
- 程序员:你的效率可以提高三倍
- Android MediaPlayer 实现音乐播放器
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_14_匿名内部类方式实现线程的创建...
- c++用一级运算比较大小_python学习五-python运算符
- v-for 遍历 Map
- Java实现文件上传和下载
- QTP之reporter对象方法全解析
- 【CUDA】解决NVIDIA安装程序失败问题
- PCF8591使用及Python控制
- 房租、房价又在涨—房产放松的空间还有多大?
- [攻防世界]getit
- 红楼梦人物出场统计python_用Python分析《红楼梦》:见证贾府的兴衰
- scribd.com文档下载
- 支付宝开放平台当面付接口整体解析
- 操作系统思考 第三章 虚拟内存
- 叙事的变迁:从《街》到《428》
热门文章
- python 证书-python+证书
- 生成式模型的发展历程
- 案例:后台管理案例(VUE路由案例)
- python常用的集成开发工具,python的主流开发工具
- android MediaCodec 音频编解码的实现——转码
- 计算机网络socket翻译成中文,Socket的错误码和描述(中英文翻译)
- Filter_过滤器
- python+opencv实现NCC模板旋转匹配(图像处理)
- 看inux系统中的c语言编译器,Linux系统自定义安装C语言gcc编译器图文详细教程
- 【Matlab】Simulink系统仿真(了解)