• 【DBMS学习系列】DBMS(数据库管理系统)的存储模型

【DBMS学习系列】DBMS(数据库管理系统)的存储模型

2025-05-09 02:37:03 栏目:宝塔面板 32 阅读

一、前置知识

1.1 什么是OLAP 和 OLTP?

On-Line Analytical Processing,简称OLAP(联机分析处理),是一种用于处理大规模数据的技术,它提供了一种灵活的分析和查询方式,能够帮助用户从不同维度来分析和理解业务数据。

On-Line Transaction Processing,简称OLTP(联机事务处理),是一种数据处理类型,包括执行多个并发的事务,例如网上银行、购物、订单处理等。

OLAP和OLTP的主要区别:联机分析处理 (OLAP) 系统的主要用途是分析聚合数据,而联机事务处理 (OLTP) 系统的主要用途是处理数据库事务。

  • • 使用 OLAP 系统来生成报告、执行复杂的数据分析和确定趋势。
  • • 使用 OLTP 系统来处理订单、更新库存和管理用户账户

OLAP和OLTP的相似之处:都是用于存储和处理大量数据的数据库管理系统,都需要高效可靠的 IT 基础设施才能平稳运行。

1.2 OLAP WorkLoad

OLAP经常对大量的Read-Only数据进行顺序扫描。所以底层的OLAP数据库需要把各个数据条目按照条件筛选出来,然后拼接在一起。

OLAP使用索引来查找数据,不需要顺序扫描。

• 基于树的索引(B+树)用于具有低选择性谓词的查询。

• 需要适应增量更新

1.3 顺序扫描的优化点

• 数据编码/压缩

• 指令预取

• 并行化

• 聚类/排序

• 延迟物化

• 物化视图/结果缓存

• 数据跳过

• 数据并行化/向量化

• 代码特化/编译

二、DBMS的存储模型

DBMS,数据库管理系统。 这里指的比较通用,不区分OLAP数据库,OLTP数据库。

DBMS的存储模型决定了它如何把磁盘和内存里的数据在物理上有效地组织起来。

一般有三种模型:N-ary Storage Model (NSM,行存储)、Decomposition Storage Model (DSM,列存储)、Hybrid Storage Model (PAX,混合存储),前两种是两个方向的极端,第三种PAX是前两种的折中。计算机领域很多方案的设计都是这种折中,权衡的思想。

2.1 N-ary Storage Model (NSM,行存储)

NSM就是我们所说的行存储,DBMS把每个tuple中的所有属性连续的存储在一个Page中。

这样的存储方式对于OLTP这种写操作较多且通常只访问单个的entities来说是非常理想的。

图片

但对于OLAP场景来说,通常只对指定的几个列做分析,这样会导致读取很多无效的数据(不会用到的列的数据也被读出来了),从而影响查询的效率。例如下面的例子:

图片

因此催生出了列式存储。

2.2 Decomposition Storage Model (DSM,列存储)

DSM就是我们常说的列存储,在DSM中,DBMS把所有tuples的每个列单独连续的存储在Page中。每个列都维护单独的文件进行存储。

这种存储方式有利于OLAP这种读场景较多且会对某些列进行大量查询的场景。在OLAP场景下,针对某个列进行过滤或聚合时,则只需要读这个列所在的Page就行。

图片

下面是一个DSM在OLAP的例子:关于在不同page里(不同列)属于同一个元组的数据的识别方法有两种,一种是固定长度的偏移(这种可能造成空间浪费,取决于字节数最大的那个值),另一种是变长偏移(借助字典编码方式,工程实现里一般都是采用这种方式)。

图片

DSM的优缺点如下:

优点:1、减少大量的无效I/O查询。2、查询更快,因为增加了数据本地性和缓存数据复用3、更好的数据压缩(同一列的数据类型一样,一般可以采用某种数据编码方式统一压缩)

缺点:1、点查、插入、更新、删除比较慢,因为有元组的切分、拼接、重组等过程。

2.3 Hybrid Storage Model (PAX,混合存储)

PAX是一种混合存储模型,是行存和列存的一种综合折中存储模型。

它先水平地把元组行切分成多个groups。 然后每个组group内再垂直地把元组的数星切分到列里,它在每个Page中垂直区分保存表的每个属性。 全局元数据目录包含了文件的row group的偏移(例如orc、parquet文件的footer),每一个row group也有自己的元数据header。

采用这种模型的目的是为了既能获得列存的快速处理的高性能又能获得行存的空间本地性优势,Parquet、 ORC、Arrow都是采用的PAX这种存储模式。

示意图如下:

图片

以上就是本文要讲的主要内容。

接下来的1-2个章节会学习关于数据格式(data-format)的设计、 数据压缩等内容。

本文地址:https://www.yitenyun.com/192.html

搜索文章

Tags

数据库 API FastAPI Calcite 电商系统 MySQL 数据同步 ACK 双主架构 循环复制 Web 应用 异步数据库 序列 核心机制 生命周期 Deepseek 宝塔面板 Linux宝塔 Docker JumpServer JumpServer安装 堡垒机安装 Linux安装JumpServer esxi esxi6 root密码不对 无法登录 web无法登录 Windows Windows server net3.5 .NET 安装出错 宝塔面板打不开 宝塔面板无法访问 SSL 堡垒机 跳板机 HTTPS Windows宝塔 Mysql重置密码 无法访问宝塔面板 HTTPS加密 查看硬件 Linux查看硬件 Linux查看CPU Linux查看内存 ES 协同 修改DNS Centos7如何修改DNS scp Linux的scp怎么用 scp上传 scp下载 scp命令 防火墙 服务器 黑客 Serverless 无服务器 语言 存储 Oracle 处理机制 Spring SQL 动态查询 Linux 安全 网络架构 工具 网络配置 RocketMQ 长轮询 配置 加密 场景 MySQL 9.3 开源 PostgreSQL 存储引擎 HexHub Canal Rsync 架构 InnoDB 缓存方案 缓存架构 缓存穿透 信息化 智能运维 响应模型 日志文件 MIXED 3 监控 线上 库存 预扣 索引 数据 业务 AI 助手 数据库锁 聚簇 非聚簇 B+Tree ID 字段 单点故障 GreatSQL Hash 字段 分库 分表 云原生 DBMS 管理系统 优化 万能公式 Redis Redis 8.0 数据集成工具 ​Redis 机器学习 推荐模型 SVM Embedding SpringAI 自定义序列化 openHalo OB 单机版 SQLite Redka sqlmock PostGIS 系统 SQLark 虚拟服务器 虚拟机 内存 查询 prometheus Alert SQLite-Web 数据库管理工具 自动重启 运维 缓存 sftp 服务器 参数 共享锁 RDB AOF 分页查询 Netstat Linux 服务器 端口 排行榜 排序 EasyExcel MySQL8 向量数据库 大模型 不宕机 同城 双活 容器化 分布式架构 分布式锁​ 聚簇索引 非聚簇索引 • 索引 • 数据库 Entity 开发 技术 Testcloud 云端自动化 人工智能 推荐系统 分页 数据结构 AIOPS IT 数据备份 Postgres OTel Iceberg 数据类型 OAuth2 Token StarRocks 数据仓库 Doris SeaTunnel IT运维 连接控制 机制 Python Web MongoDB 容器 LRU Milvus 池化技术 连接池 Caffeine CP 部署 向量库 悲观锁 乐观锁 Ftp redo log 重做日志 崖山 新版本 高可用 MVCC 事务隔离 磁盘架构 流量 MCP 开放协议 电商 mini-redis INCR指令 微软 SQL Server AI功能 单线程 线程 速度 服务器中毒 Web 接口 字典 QPS 高并发 原子性 对象 数据脱敏 加密算法 窗口 函数 R2DBC 双引擎 RAG HelixDB Order 频繁 Codis 主库 SSH 网络 Crash 代码 ZODB 优化器 引擎 性能 List 类型 Pottery dbt 数据转换工具 1 PG DBA 工具链 模型 发件箱模式 意向锁 记录锁 InfluxDB 传统数据库 向量化 事务同步 UUIDv7 主键 网络故障 仪表盘 Redisson 锁芯 Undo Log LLM 订单 线程安全 JOIN INSERT COMPACT 连接数