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

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

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

一、前置知识

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