🏗️ 架构 · 数据基础设施

Spotify 开源 RAP 架构打通数据湖与在线服务,单条记录检索告别数据库搬运

Spotify 推出 Random Access Parquet(RAP) 存储架构,在 Parquet 文件之上增加外部索引层,让数据湖直接支持低延迟点查询——在线服务和 AI 应用无需再将数据复制到操作型数据库,即可检索单条记录。

综合公开信息整理 2026-08 全文约 3 分钟读完
#Spotify #RAP架构 #数据湖 #Apache Parquet #点查询
EB 级 数据湖存储规模(基于 GCS)
PB Bigtable 中的在线数据量
几 KB 部分点查询仅需一次范围读取

⚡ 30 秒速览

  • 核心问题:分布式查询引擎为分析扫描而生,基于键的检索单条记录效率极低,查询规划和元数据遍历带来大量额外开销。
  • 解决方案:在 Parquet 文件之上增加外部索引层,将查询键直接映射到文件及行位置,发起定向范围读取。
  • 关键特性:索引构建器生成仅追加片段,不修改不可变的 Parquet 文件;支持二级索引、覆盖索引与交错值列布局。
  • 核心价值:同一数据集同时服务分析、ML 流水线、Notebook、AI 智能体和延迟敏感型在线应用,无需维护重复存储。

01为什么需要 RAP数据湖的点查询困境

现代数据湖已成为分析和 AI 工作负载的中央存储库。但检索单条记录这件事,一直是个麻烦。

Trino 和 BigQuery 等分布式查询引擎针对分析扫描优化,而非基于键的查询。尽管 Google Cloud Storage 等云对象存储已能提供毫秒级访问延迟,但查询规划、元数据遍历和文件发现仍会给点查询带来大量额外开销。

Spotify 的规模让这个问题更加尖锐。

Bigtable 存储 PB 级在线数据 + GCS 数据湖 EB 级数据

向服务数据库大规模复制数据的成本越来越高。RAP 正是为打破这种复制困境而生。

注:PB 与 EB 为 Spotify 公开披露的存储量级,代表在线数据库与数据湖的规模差异,而非全部 RAP 管理数据。

02RAP 是什么外部索引层,不动数据

RAP 的核心思路:在 Apache Parquet 文件之上增加一个外部索引层。索引将用户 ID 等查询键直接映射到 Parquet 文件及其行位置。

查询无需扫描数千个文件,而是先通过索引解析键,再针对对象存储发起定向范围读取。随着新数据写入 Apache Iceberg 表,索引构建器生成仅追加的索引片段,不修改不可变的 Parquet 文件。

传统方案

数据湖→ETL搬运→操作型数据库→在线服务。两套存储,数据重复,同步成本高。

RAP 架构

数据湖(Parquet + 外部索引)→ 分析与在线服务共用同一数据集,零搬运。

这意味着相同的数据集能够同时支持分析处理、机器学习流水线、Notebook、AI 智能体和对延迟敏感的在线应用,无需维护重复的存储系统。

注:对比卡仅展示存储架构层面的核心差异,实际部署中 RAP 仍需服务层管理索引生命周期。

03一次点查询的完整链路从键到记录

RAP 的工作流程可以拆解为四个阶段:

接收查询键索引解析定位定向范围读取返回单条记录

与扫描数千个文件的传统路径相比,RAP 将查询路径压缩为索引查找 + 一次定向读取。配合存储布局优化,部分点查询只需对几 KB 数据执行一次范围读取即可完成。

但是,索引不是免费的。

这些技术以适度增加文件或索引大小为代价,减少存储操作次数。这是一种存储空间与查询延迟之间的工程权衡。

注:链路图简化了实际执行中的缓存命中、索引合并等中间步骤,仅展示核心数据路径。

04四项关键优化把延迟压到极限

📊 存储布局排序减少文件访问

  • 按查询键对数据排序,减少访问的文件数量
  • 将相关记录组织在一起,提升单次读取的有效数据密度。
判断:以增加文件大小为代价,换取更少的存储操作次数——典型的空间换时间。

🔀 交错值列布局一次读取多属性

  • 将多个列的相关值交错排列,通过一次连续读取即可获取多个属性。
  • 避免传统列式存储中多列查询需多次随机读取的问题。
判断:针对多属性点查询场景的专用优化,牺牲部分列式压缩率换取读取效率。

🛡️ 覆盖索引免读 Parquet

  • 部分查询无需读取 Parquet 文件即可完成,索引本身已包含所需字段。
  • 进一步减少对象存储访问次数,将延迟压至更低。
判断:以索引体积膨胀为代价,换取高频查询的极致响应

🔑 二级索引与 Z 排序多维度查询

  • 支持跨买家 ID、卖家 ID 等多维度高效查询,无需重写 Parquet 文件
  • 哈希索引支持精确查询,排序索引支持范围查询。
  • Z 排序和希尔伯特曲线进一步改善二级查询维度的数据局部性
判断:二级索引在服务层管理,不更改数据流水线即可增加新访问路径,架构解耦度高。

05行业坐标不是孤例,但有差异

Spotify 的发布是业界推动开放数据湖技术突破分析处理范畴的又一次尝试。Google Cloud 最近也介绍了面向 AI 应用的基于 Apache Iceberg 的湖仓架构,试图在实现数据操作访问的同时减少数据重复。

但 RAP 走了一条不同的路。

与 Google Cloud 的方法不同,RAP 引入了一个针对点查询优化的专用外部索引层,同时保持与现有 Parquet 文件和 Iceberg 表的兼容性。

Google Cloud:Iceberg 湖仓 Spotify RAP:外部索引层 Trino / BigQuery:分析扫描 共同方向:减少数据重复

在社区讨论中,Andrew Lamb 将 RAP 视为扩展开源数据格式以支持交互式工作负载的一个例子。Vikas Singh 则指出,云对象存储性能的提升已使点查询延迟更多地转移到查询规划和元数据访问上,而 RAP 正是通过预计算索引来减少这方面的延迟。

注:标签云按技术路线分类,非严格时间线;各方案仍在演进中,边界可能模糊。

06编辑核心判断

RAP 的本质不是发明了一种新的存储格式,而是在不动数据的前提下,给数据湖加了一副「索引眼镜」——让原本只能做批处理的存储层,获得了点查能力。

这种思路的代价是诚实的:索引需要构建和维护,文件大小会膨胀,存储布局优化意味着压缩率与查询速度的权衡。它并非银弹,而是针对特定查询模式的工程优化。

编辑核心判断

当 AI 智能体需要从海量数据中精准检索单条记录时,「分析存储」与「服务存储」的边界正在消失——数据湖不再只是数据的终点,而是正在成为所有应用的统一入口。