“存算分离”架构 + “云原生”技术 + “向量化执行引擎”。

下面我们分点详细拆解这些技术原理。
核心架构:存算分离
这是 ADB 最根本、最颠覆性的设计,也是其高性能和高弹性的基石。
什么是存算分离?
传统的数据库(如 MySQL、PostgreSQL)是“存算一体”的,即计算节点和存储节点部署在同一台物理服务器上,计算和存储资源强绑定,无法独立扩展。
而 ADB 将计算和存储完全拆分,通过高速网络(如阿里云的内部 RDMA 网络)连接。

- 计算层:由多个无状态的计算节点组成,这些节点只负责 SQL 查询的计算和执行。
- 存储层:由一个或多个分布式存储系统组成,负责持久化存储数据,通常是基于对象存储(如阿里云 OSS)或分布式文件系统(如 HDFS)构建的。
存算分离带来的革命性优势
-
极致弹性与成本效益
- 独立扩展:业务高峰期,只需增加计算节点来应对查询压力,而存储保持不变,成本可控,业务低谷期,可以随时缩减计算节点,节省大量费用,而传统架构,扩容必须整机扩,存储资源也跟着被浪费。
- 资源隔离:计算资源之间完全隔离,一个用户的复杂查询不会拖垮整个集群的性能,保证了多租户环境下的稳定性。
-
数据与计算解耦
- 数据共享:存储层的数据可以被多个计算集群同时访问,你可以同时运行一个生产环境的分析集群和一个用于机器学习或数据探索的开发集群,它们共享同一份数据副本,无需数据拷贝。
- 计算引擎升级:可以独立升级计算层的软件版本或补丁,而无需动底层数据,实现平滑升级。
-
高可用与容灾
- 计算节点故障,存储层的数据安然无恙,新的计算节点可以快速挂载上存储,恢复服务。
- 存储层本身具备多副本、高可用的特性,数据安全性极高。
云原生技术
存算分离架构只有在云原生技术的加持下才能发挥出最大威力。

基于 Kubernetes (K8s) 的容器化调度
ADB 的计算节点以容器的方式运行在 K8s 集群中,K8s 作为云时代的“操作系统”,带来了巨大好处:
- 自动化运维:计算节点的创建、启停、扩缩容、故障自愈等都可以通过 K8s 的 API 自动完成,实现了分钟级甚至秒级的弹性伸缩。
- 资源高效利用:K8s 可以在物理机上精细地调度和管理容器,最大化硬件资源利用率。
- 标准化与生态:基于容器和 K8s,可以与 DevOps、CI/CD 等云原生工具无缝集成。
存储计算分离的高效网络
存算分离的致命弱点是网络延迟,如果通过网络频繁读写数据,性能会急剧下降,ADB 采用了多种技术来弥补这一点:
- RDMA (Remote Direct Memory Access):这是高性能计算的关键技术,它允许计算节点直接读写存储节点的内存,而无需经过 CPU 的干预,极大地降低了网络延迟(微秒级)并提高了带宽。
- 列式存储 + 数据本地性:这是另一个关键点,虽然存储是共享的,但 ADB 会将数据以列式的方式组织,当查询只需要少数几列时,计算节点会通过网络只拉取它需要的数据列,而不是整行数据,极大地减少了网络 I/O,K8s 的调度策略会尽量将计算任务调度到存放了数据副本的节点上,实现“数据本地性”,减少跨节点访问。
核心引擎:向量化执行引擎
这是 ADB 实现高性能查询计算的“心脏”,传统数据库的执行引擎是“逐行处理”(Row-based)的,而 ADB 采用的是“向量化处理”(Vectorized)。
什么是向量化执行?
想象一下处理一个任务:
- 逐行处理(标量执行):像一个工人,一次只处理一个数据,从内存中读取一行 -> 解析 -> 执行一个计算(如加法)-> 写回结果,然后重复这个过程 N 次。
- 向量化处理(向量执行):像一个流水线工人,一次处理一批数据(一个向量,1024 行),从内存中一次性读取 1024 行数据 -> 解析成一个向量 -> 执行一个计算(如加法,用 CPU 的 SIMD 指令一次对 1024 个数进行加法)-> 写回结果向量,重复这个过程 N/1024 次。
向量化执行带来的巨大优势
- CPU Cache 命中率飙升:处理一个数据向量时,相关的数据和指令会集中在 CPU 的 L1/L2 Cache 中,减少了 Cache Miss,大幅提升了计算效率。
- 指令级并行:现代 CPU 的 SIMD(如 Intel 的 AVX,ARM 的 NEON)指令集,可以一次性对一组数据执行相同的操作,向量化执行完美利用了这一硬件特性,实现了“一次计算,多点开花”。
- 减少解释/编译开销:对于批量数据,数据库可以一次性生成优化的执行代码,而不是对每一行数据都进行一次解释或编译,减少了虚函数调用和分支预测的开销。
- 内存访问效率高:顺序读写内存块,比随机读写内存要快得多,这更符合硬件的访问模式。
其他关键技术组件
除了上述三大核心,ADB 还集成了多项关键技术来构建一个完整的数仓系统。
列式存储
这是向量化执行和高效查询的基础,数据按列存储,而不是按行。
- 优势:
- 查询高效:查询只需读取涉及的列,极大减少 I/O。
- 压缩率高:同一列的数据类型相同,值域相似,更容易采用高效的压缩算法(如字典编码、行程编码),节省存储空间。
- 适合分析:分析型查询通常需要聚合、分组等操作,列式存储能完美匹配这些场景。
MPP (Massively Parallel Processing) 架构
ADB 是一个大规模并行处理系统,一个复杂的查询会被自动拆分成多个子任务,分发到所有的计算节点上并行执行。
- 查询优化器:这是数据库的“大脑”,ADB 的优化器非常智能,它会分析 SQL 语句,基于统计信息,选择最高效的执行计划,包括如何进行数据分区、如何 Join 表、如何并行化等。
- 分布式执行:数据在存储层通常是按分区(Partition)和分桶(Bucket)组织的,可以按用户 ID 的哈希值将数据分布到不同的节点上,当查询某个用户的数据时,可以只从对应的节点上读取,实现数据的并行扫描和计算。
智能物化视图
这是一个提升特定查询性能的“利器”。
- 原理:用户可以预先定义好一个或多个复杂查询的 SQL,ADB 会将这个查询的结果集作为一个“物化视图”预先计算并存储起来。
- 效果:当用户发起与物化视图定义相同的查询时,ADB 会直接返回预计算的结果,响应时间可以从秒级降低到毫秒级,ADB 甚至可以自动维护物化视图的更新策略,保证数据的准实时性。
实时写入与查询
ADB 采用了 LSM-Tree (Log-Structured Merge-Tree) 的变体来处理数据写入,数据首先写入内存中的 MemTable,达到一定大小后,刷成一个不可变的磁盘文件(SSTable),这种设计使得写入性能非常高,且不受数据量大小的影响,后台会有一个 Compaction 进程,将这些小的 SSTable 合并成大的、有序的文件,从而优化查询性能。
阿里 ADB 技术原理全景图
可以将 ADB 的技术原理想象成一个高度优化的现代化工厂:
| 层次 | 技术/组件 | 作用/类比 |
|---|---|---|
| 架构层 | 存算分离 | 工厂设计与规划:将生产车间(计算)和仓库(存储)分开,可以独立扩建车间或仓库。 |
| 基础设施 | 云原生 | 智能物流与自动化调度:使用 K8s 实现车间(计算节点)的自动化、弹性管理,RDMA 网络是高速传送带。 |
| 核心引擎 | 向量化执行引擎 | 现代化流水线:工人(CPU)一次处理一箱(数据向量)零件,而不是一个一个零件,效率极高。 |
| 数据组织 | 列式存储 & MPP | 标准化零件库:零件(数据)按类型(列)分门别类存放,方便按需提取;整个仓库由多个子仓库(计算节点)并行管理。 |
| 智能优化 | 查询优化器 | 总工程师:智能规划最高效的生产流程(执行计划)。 |
| 性能加速 | 物化视图 | 成品缓存区:将最畅销的成品(预计算结果)提前备好,极大缩短订单交付时间(查询响应)。 |
| 数据摄入 | LSM-Tree | 高效的收货系统:新到的货物(数据)先快速放入临时货区(内存),再由后台整理入库(磁盘)。 |
阿里 ADB 通过存算分离实现了架构上的弹性和成本优势,借助云原生技术将这一架构落地并实现自动化运维,最后通过向量化执行引擎这一杀手锏,在计算层面实现了极致的性能,辅以列式存储、MPP、智能优化等一系列技术,共同构建了一个面向云时代的、高性能、高弹性的现代数仓解决方案。
