Lance 这类多模态数据格式是什么?为什么说 Parquet 不够用了?
面试怎么回答
传统分析是扫描大量行、少数列做聚合,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 数据需要随机读、大字段、向量索引、频繁加列,这些是传统列式格式的弱项」,就说明你理解存储格式背后的设计取舍。