Lance 这类多模态数据格式是什么?为什么说 Parquet 不够用了?

第 1265 题 约 2 分钟读完

本文目录
  1. 面试怎么回答
  2. AI 数据的访问模式有什么不同
  3. Parquet 在这些场景的不足
  4. Lance 的设计思路
  5. 不是替代,而是分工
  6. 面试里的价值

面试怎么回答

传统分析是扫描大量行、少数列做聚合,Parquet 优化得很好。但 AI 场景要随机读取样本和按 ID 取原文,有图片、音频、向量这种大字段,需要向量索引,还经常给数据集新增 Embedding 或标注列。Parquet 按行组和页编码,随机点查效率不高,大二进制字段不友好,没有向量索引,加列通常要重写。Lance 是为 AI 和多模态数据设计的列式格式,优化了随机访问,支持向量索引、版本和低成本加列,能和 Arrow、DuckDB、PyTorch 配合。它不是替代 Parquet:结构化分析数据仍用 Parquet 加 Iceberg 这类表格式,训练样本和多模态数据集可以考虑 Lance,引入前要评估生态支持和运维成本。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

Parquet 是数据湖里最主流的列式格式,但在 AI 场景里,有人开始用 Lance 这类新格式。面试官问这题,想看你是否了解 AI 数据的访问模式和传统分析查询有什么不同,而不是只记住一个新名词。

AI 数据的访问模式有什么不同

传统分析查询:扫描大量行、少数几列,做聚合。Parquet 为此优化得很好。

AI 场景的访问模式:

  • 随机读取:训练时随机打乱样本,按行号随机读取;检索命中后按 ID 读取原文和图片;
  • 大字段:图片、音频、长文本、向量,单个值就有 KB 到 MB 级;
  • 向量检索:需要在数据上建向量索引;
  • 频繁增加列:给数据集新增一列 Embedding、一列标注结果、一列模型打分。

Parquet 在这些场景的不足

  • 随机读取慢:Parquet 按行组压缩编码,读取某一行往往要解压整个数据页甚至行组,随机点查的效率不高;
  • 大字段不友好:大的二进制值放在行组里,读取和更新代价大;
  • 没有内置向量索引;
  • 加列需要重写:给已有数据新增一列,通常需要重写文件(表格式层可以缓解,但底层仍有代价)。

Lance 的设计思路

Lance 是为 AI 和多模态数据设计的列式格式(LanceDB 背后使用的就是它):

  • 优化了随机访问,按行号读取的性能远好于传统列式格式;
  • 支持向量索引,可以直接在数据上做向量检索;
  • 支持版本管理和新增列而不必重写全部数据;
  • 可以和 Arrow 生态、DuckDB、Pandas、PyTorch 等工具配合使用。

不是替代,而是分工

  • 结构化的分析数据:仍然是 Parquet + Iceberg / Delta / Paimon,生态成熟,SQL 引擎支持最好;
  • 训练样本、多模态数据集、需要向量检索的数据:可以考虑 Lance 这类格式;
  • 新格式的生态和成熟度还在发展中,引入前要评估团队现有引擎的支持情况和运维成本。

面试里的价值

即使没有在生产中用过,能讲清楚「AI 数据需要随机读、大字段、向量索引、频繁加列,这些是传统列式格式的弱项」,就说明你理解存储格式背后的设计取舍。