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. 使用这个下标组装出最终的结果集。

数据库—行式存储和列式存储相关推荐

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

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

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

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

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

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

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

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

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

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

  6. “行式存储”和“列式存储”的区别

    https://www.jianshu.com/p/3d3950c9fb06 我们知道 当今的数据处理大致可分为两大类 联机事务处理 OLTP (on-line transaction process ...

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

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

  8. 数据库行式存储和列式存储的区别

    假设我们有一张student数据表: name gender age score 张三 男 16 67 李四 女 18 98 王五 男 17 85 假设我们有一个磁盘,那么在经典的行式存储中,数据是怎 ...

  9. DataBase_数据库的行式存储与列式存储

    存储差异 行式存储:以行为单位进行存储,存储在连续的物理内存上 列式存储:以列为单位进行存储,存储在连续的物理内存上 读取差异 animal表: name age color Tom one blue ...

最新文章

  1. paramiko基础
  2. [vue] 组件和插件有什么区别?
  3. 解决idea一直updating index
  4. mysql架构深入_mysql性能优化2:深入认识mysql体系架构
  5. 程序员:你的效率可以提高三倍
  6. Android MediaPlayer 实现音乐播放器
  7. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_14_匿名内部类方式实现线程的创建...
  8. c++用一级运算比较大小_python学习五-python运算符
  9. v-for 遍历 Map
  10. Java实现文件上传和下载
  11. QTP之reporter对象方法全解析
  12. 【CUDA】解决NVIDIA安装程序失败问题
  13. PCF8591使用及Python控制
  14. 房租、房价又在涨—房产放松的空间还有多大?
  15. [攻防世界]getit
  16. 红楼梦人物出场统计python_用Python分析《红楼梦》:见证贾府的兴衰
  17. scribd.com文档下载
  18. 支付宝开放平台当面付接口整体解析
  19. 操作系统思考 第三章 虚拟内存
  20. 叙事的变迁:从《街》到《428》

热门文章

  1. python 证书-python+证书
  2. 生成式模型的发展历程
  3. 案例:后台管理案例(VUE路由案例)
  4. python常用的集成开发工具,python的主流开发工具
  5. android MediaCodec 音频编解码的实现——转码
  6. 计算机网络socket翻译成中文,Socket的错误码和描述(中英文翻译)
  7. Filter_过滤器
  8. python+opencv实现NCC模板旋转匹配(图像处理)
  9. 看inux系统中的c语言编译器,Linux系统自定义安装C语言gcc编译器图文详细教程
  10. 【Matlab】Simulink系统仿真(了解)