什么是Lance
Lance 是一种专为大规模 AI 数据集设计的现代化列式数据格式。它类似于 Parquet,但针对多模态数据(如图像、视频、音频、点云及传统表格数据)的存储和访问进行了深度优化。Lance 支持与 POSIX 兼容的Linux文件系统以及主流云对象存储(火山引擎 TOS),使其成为构建统一 AI 数据湖的理想基础。

Lance 格式的核心在于其高效的文件结构,它由三层逻辑构成:
- 文件格式层: 自主研发的底层存储格式,能够高效地存储和随机访问大规模、多模态的数据。
- 数据湖格式层: 类似于 Apache Iceberg,提供了强大的数据湖管理功能,如原子事务、多版本控制,以离线引擎访问为主,不支持流引擎的写入,AI场景目前也不适用。
- 应用层: Lance支持多种方式接入,可以使用单机的SDK操作,例如PyLance,也可以通过分布式的引擎,例如Spark和Ray进行读写Lance数据,甚至能够通过lancedb的接口,将lance当做向量数据库使用。
Lance可以做什么
主要特点
Lance 的主要功能包括:
- 高性能随机访问:针对单条数据,take 操作性能较 Parquet 提升 10 倍以上。
- 向量搜索:索引支持毫秒级最近邻居查找,并实现标量查询与向量搜索的结合。
- 零拷贝、自动版本控制:自动管理数据版本,并使用内置的零拷贝逻辑减少冗余。
- 生态系统集成: Apache Arrow、DuckDB 以及更多正在开发中。
解决的核心问题 (AI 数据集的挑战)
传统的 AI/ML 工作流中,数据集的管理面临诸多挑战,例如:
- 版本混乱: 训练数据的变更难以追踪,导致模型训练结果无法复现。
- 访问低效: 对于大规模数据集,特别是包含向量或多媒体文件的数据,随机访问和查询性能低下。
- 生态割裂: 数据预处理、模型训练和向量搜索等环节通常需要使用不同的工具和数据格式,增加了系统的复杂性和数据冗余。
Lance 通过提供一个统一的平台来解决这些问题,其核心能力包括:
- 统一管理多模态数据: 将非结构化数据(如图像)和结构化数据(如元数据、标签)存储在同一张表中。
- 高效的数据版本控制: 自动记录每一次数据变更,确保实验的可复现性。
- 高性能的查询与搜索: 支持对数据过滤和向量相似度搜索。
核心特性
- 零拷贝、免索引的数据访问: 读取数据时采用零拷贝技术,避免不必要的数据复制,显著提升 I/O 效率。其独特的格式设计使得随机访问性能比 Parquet 快 100 倍,无需依赖额外的索引。
- 数据集版本控制与可复现性: 所有的数据写入、更新或删除操作都会自动生成一个新的、不可变的数据集版本。
- 与生态系统的无缝集成: Lance 与 Apache Arrow 内存格式完全兼容,可以轻松地与 Pandas、DuckDB、Polars 等主流数据科学工具进行数据交换,同时也支持与 Spark、Ray 等大规模分布式计算引擎集成。
架构概览
Lance 格式的内部结构
一个 Lance 数据集在存储上表现为一个目录,其内部主要包含:
data/ 目录:存放真实的数据文件(.lance 文件)。_versions/ 目录:存放每个版本的元数据清单(manifest 文件),记录了该版本包含了哪些数据文件。_transactions/ 目录:用于保证写入操作的原子性。
数据读写流程
如何使用
如何使用请查看快速入门。