新闻详情

新闻详情

首页 / 资讯中心 / 详情

从存算一体到现代湖仓:对标传统关系型数据库透视 Bucket + Iceberg + Trino 的物理本质

发布时间:2026/9/29 15:10:05来源:尧图网络
从存算一体到现代湖仓:对标传统关系型数据库透视 Bucket + Iceberg + Trino 的物理本质
1. 架构本质从“存算强绑定”到“三权分立”在传统关系型数据库如 PostgreSQL / MySQL体系中计算引擎、元数据管理与物理存储被紧密耦合在同一个操作系统进程与宿主机文件系统内计算层单体postgres守护进程负责 SQL 解析、查询优化、执行计划生成与缓冲区管理事务层依托本地内存中的锁管理器Lock Manager与顺序追加的预写日志WAL - Write Ahead Log维系 ACID 事务存储层直接操作本地块存储Block Storage上的私有行式数据页文件Heap Files如/var/lib/postgresql/data/base/...。这种强绑定模型虽然保障了单机低并发事务的高内聚但在现代海量半结构化数据摄入与交互式敏捷分析场景下暴露出致命瓶颈存储与算力无法独立弹性伸缩、物理文件格式闭源专有导致生态割裂、跨引擎并发写容易引发元数据死锁。现代数据湖仓Lakehouse架构通过将传统数据库的核心组件彻底拆解为三个独立抽象层重塑了数据系统的分工边界现代湖仓一体分层架构_Lakehouse基于元数据剪枝读取/提交持久化快照与Parquet列存计算引擎层: Trino / Flink (纯无状态计算节点)表格与事务层: Apache Iceberg (快照隔离 / 隐藏分区 / ACID)对象存储底座: S3-Compatible Bucket (如 Cloudflare R2 / AWS S3)传统关系型数据库单体模式_如PostgreSQL计算层: postgres 进程 (SQL解析 / 内存计算)事务层: 本地 WAL 日志 共享内存事务状态存储层: 本地私有行存数据文件 (Heap Files)三个核心组件在物理本质上分别对应传统数据库的关键构件湖仓三层栈组件物理本质与规范定位对标传统关系型数据库 (PostgreSQL)Object Bucket (如 R2)分布式高可用对象存储底座存放不可变物理文件本地块设备文件系统 (/var/lib/postgresql/data)Apache Iceberg开放表格式规范Table Format提供快照隔离与 ACID 事务树本地 WAL 日志 数据字典系统表 (pg_class,pg_attribute)Trino分布式纯内存大规模并行处理MPP查询计算引擎postgres进程执行 SQL 解析、CBO 优化、内存流式计算2. 存储底座 (Object Storage)不可变文件系统的物理形态在湖仓架构中对象存储如 Cloudflare R2、AWS S3不再按传统文件系统的层级目录树Directory Tree来组织而是扁平的 Key-Value 寻址对象池。存储在 Bucket 内部的数据具有以下物理特征写一次不可变Write-Once, Read-Many任何数据文件一旦被 Flink 或 Spark 写入完成并关闭即变为物理只读不可变文件。修改或删除数据并不直接原地修改物理文件而是生成新的文件版本开放列式编码Apache Parquet数据不再采用传统数据库的 8KB 物理行存页而是采用标准的 Parquet 格式列式编码存储。每列数据单独连续排布配合 Snappy 或 ZSTD 压缩算法压缩比可达 5:1 至 10:1零出网成本与近乎无限吞吐借助分布式存储协议读写并发能力摆脱了单块 NVMe SSD 的物理 IOPS 瓶颈由多节点网卡并发吞吐分摊流量。3. 表格式 (Apache Iceberg)将“一堆文件”抽象为“单张事务表”若仅在存储桶中存放海量 Parquet 文件系统充其量只是一个原始数据沼泽Data Swamp。查询引擎若要找一条记录只能执行全量文件暴力扫描Full Scan。Apache Iceberg 的核心技术使命是在不可变的对象存储上用一系列层级自解释的元数据文件构建出一棵带 ACID 事务特性的快照树Snapshot Tree。数据层_Data_Layer元数据层_Metadata_Layer指向最新当前根元数据记录当前 Snapshot ID历史快照回溯Manifest List记录列统计值: min/max/null记录列统计值: min/max/null记录列统计值: min/max/nullIceberg Catalog (JDBC / Hive / REST)v2.metadata.json (Table Metadata)Snapshot S2 (Committed)Snapshot S1 (Time Travel)snap-S2.avro (Manifest List)manifest-1.avromanifest-2.avro00001.parquet00002.parquet00003.parquet3.1 物理层级解析Catalog (目录层)仅维护一个轻量原子指针记录该表当前最新有效的元数据文件物理地址如s3://bucket/metadata/v2.metadata.json。在更新快照时Catalog 执行类似比较并交换Compare-And-Swap · CAS的原子操作Table Metadata (vN.metadata.json)表的总蓝图记录字段 Schema 定义、分区规则Partition Spec、排序规则以及按时间递增的历史快照Snapshot列表Manifest List (snap-*.avro)单次快照提交的直接入口文件记录了当前快照所包含的所有 Manifest 文件的物理路径以及各个 Manifest 所涵盖的分区范围Manifest File (*.avro)最底层的元数据清单逐一记录每个具体 Parquet 数据文件的物理路径、文件大小、行数以及各列的关键统计指标下界 Minimum、上界 Maximum、空值数量 Null Count。3.2 事务与隔离机制的本质传统数据库依赖锁管理器实现隔离级别。Iceberg 则通过**写时快照隔离Snapshot Isolation via Copy-on-Write / Merge-on-Read**完全消除了读写锁冲突读操作任何查询引擎在开始时绑定特定的 Snapshot ID后续读取全程基于该不可变快照树进行读操作永不阻塞写操作写操作并发任务在独立的内存或工作区中写入新 Parquet 文件并生成新的 Manifest只有在完成全量写入后才向 Catalog 发起元数据原子替换请求。提交成功后快照自增至S(N1)若发生冲突则自动执行乐观并发控制OCC重试。审计回溯Time Travel由于历史快照及底层的 Parquet 文件在提交后未被立刻物理物理删除查询引擎只需声明FOR TIMESTAMP AS OF或FOR VERSION AS OF即可直接调阅表在任意历史毫秒时刻的完整状态。4. 计算引擎 (Trino)纯内存大规模并行流式查询Trino原 PrestoSQL本身是一个无存储的、纯无状态Stateless的分布式计算引擎。Cloudflare R2 (Parquet 数据)Trino Workers (内存计算集群)Iceberg Metadata (R2)Trino Coordinator (大脑)Cloudflare R2 (Parquet 数据)Trino Workers (内存计算集群)Iceberg Metadata (R2)Trino Coordinator (大脑)元数据剪枝 (Metadata Pruning):比对 Min/Max 统计值剔除 95% 不相关文件par[Workers 并发流式拉取]客户端 / SQL Client提交 SQL (如: SELECT * FROM raw_sms_records WHERE received_at ...)11. 读取 vN.metadata.json 与 Manifest Avro22. 将命中文件的扫描任务拆分为 Splits 派发给 Workers33. 并行拉取命中 Parquet 文件的特定列 (Columnar Projection)44. 纯内存向量化解压、计算、哈希聚合55. 跨节点内存分页管道毫秒级流式返回结果6客户端 / SQL Client4.1 查询性能为什么能达到毫秒级很多开发者直觉认为“从远程对象存储读文件一定很慢”但 Trino Iceberg 的协同优化打破了这一限制元数据层极端剪枝Metadata Pruning File SkippingTrino Coordinator 在 SQL 解析与计划生成阶段直接读取轻量的 Avro Manifest 文件。若 SQL 带有过滤条件如WHERE imap_uid 1000Coordinator 比对 Manifest 里的min(imap_uid)和max(imap_uid)即可在不与任何 Parquet 数据文件发生网络 I/O 的前提下直接在内存中剔除 90% 以上的不相关文件列裁剪与行组跳过Column Projection RowGroup Skipping进入 Worker 计算阶段后Trino 仅根据 SQL 所选取的列名如仅选了msg_uid,sender向对象存储发起 HTTP 范围分段请求HTTP Range Request只拉取 Parquet 文件末尾的 Footer 元数据和对应列的数据页避免全宽表网络传输纯内存无落盘流式架构In-Memory Streaming PipeliningTrino 与 Spark 阶段落盘Shuffle Spill机制不同各执行节点之间通过 TCP 内存队列流式传递数据包数据边读取边在 CPU 缓存中向量化运算Vectorized Execution从计算到网络吐出全链路无二次磁盘写入。5. 总结与架构全景映射在传统的数据库思维中性能与事务通常被视作存储引擎的“内置黑盒特性”。通过拆解现代 Lakehouse可以看到一套职责极其清晰的工业化分工Cloudflare R2 (Bucket)充当容量近乎无限、按需计费的物理字节仓库解决“持久存储与网络分发”问题Apache Iceberg (Table Format)充当表的逻辑骨架与事务账本用 Avro 元数据树规范“什么是表、怎么切分事务、怎样做快照隔离”Apache Trino (Query Engine)充当纯粹的高效算力中枢利用分布式内存流水线专职解决“如何以最优成本把 SQL 转换为并行网络流并快速计算出结果”。这种“三权分立”的模块化架构使得系统既具备了传统关系型数据库一致严密的 ACID 事务边界与标准 ANSI SQL 交互界面又摆脱了专有磁盘与常驻主机的物理掣肘达成了存储成本、弹性扩容与开放生态之间的平衡。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

LeetCode 26题详解:双指针原地去重有序数组的算法思维 2026/9/29 16:13:09

LeetCode 26题详解:双指针原地去重有序数组的算法思维

1. 题目拆解与核心思路转换做算法题最怕一上来就埋头写代码,先花两分钟把题目读懂比什么都重要。LeetCode 第 26 题"删除有序数组中的重复项",题面非常短:给你一个升序排列的数组,请在原地删除重复出现的元素&#xff0…

阅读更多 →
vSAN 8.0存储策略与运维实战:从磁盘布局到关机流程的避坑指南 2026/9/29 16:13:08

vSAN 8.0存储策略与运维实战:从磁盘布局到关机流程的避坑指南

简介:面向VMware vSAN 8.0认证(5V0-22.23)备考者,内容覆盖vSAN集群磁盘布局(OSA/ESA)、FTT存储策略调整、性能服务开启排查、vLCM离线升级、主机故障恢复等高频考点,以题目解析形式呈现。包体仅…

阅读更多 →
数字IC后端STA必修:OCV与timing derate配置详解 2026/9/29 16:13:08

数字IC后端STA必修:OCV与timing derate配置详解

1. 为什么OCV和timing derate是数字IC后端绕不开的坎做数字IC设计的同行都有个共识:前端RTL写得再漂亮,最后能不能signoff,很大程度上取决于STA(Static Timing Analysis)做得够不够扎实。而提到STA,PrimeTi…

阅读更多 →
一维序列预训练实战:双塔对比学习与时间序列特征表示 2026/9/29 16:13:08

一维序列预训练实战:双塔对比学习与时间序列特征表示

做一维序列预训练的人,多少都有过这种体会:数据集不像图像那么好找增强手段,模型稍大一点就过拟合,下游任务五花八门,每个都要单独调一套网络。我去年下半年一直在折腾一个项目,代号就叫Gemini-PT 1D。名字…

阅读更多 →
C语言链表创建与遍历实战:从malloc到while的完整链路 2026/9/29 16:13:08

C语言链表创建与遍历实战:从malloc到while的完整链路

1. 链表不是“链”而是“线”,但这条线得自己一节一节焊出来你翻过《王道数据结构电子版》第3章,也刷过翁恺C语言练习题里那道“单链表的基本操作实验”,甚至可能在期末复习时对着“数据结构与算法”PPT发过呆——但真正动手写完一个能跑通的…

阅读更多 →
ESP32上运行WebAssembly:为什么.wasm不是应用,而是一整套工程链 2026/9/29 16:13:00

ESP32上运行WebAssembly:为什么.wasm不是应用,而是一整套工程链

其实很多人在第一次接触“ESP32 WebAssembly”这个组合时,都干过同一件事:在宿主机上用 clang 编出一段 hello.wasm,然后就兴冲冲地把它扔进嵌入式工程的构建目录,按下烧录按钮,结果串口一点儿输出都没有。板子完全无…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉