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

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

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

一、前置知识

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