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

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

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

一、前置知识

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