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

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

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

一、前置知识

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