核心定位
Lance 是一个面向多模态 AI 场景的开源列式数据格式栈,包含文件格式、表格式、索引格式、目录规范和命名空间客户端规范。其核心卖点是"比 Parquet 快 100 倍的随机访问",专为嵌入向量、图像、文本等 AI 工作负载优化。
技术架构
分层 Crate 工作空间
25 个 Rust crate 构成完整实现,核心分层清晰:
- lance:公共入口,Dataset、扫描器、索引、提交
- lance-table:表格式——manifest、提交处理器、行 ID
- lance-file:文件格式——读写器
- lance-encoding:结构编码、压缩(内部使用)
- lance-index:标量/向量/全文/系统索引
- lance-io:对象存储、I/O 调度器
- lance-namespace:命名空间 trait、目录/REST 实现
文件格式版本演进
| 版本 | 状态 | 关键特性 |
|------|------|---------|
| 2.0 | 稳定 | 移除 row group,列表/FSL/原生类型支持 null |
| **2.1** | **当前默认** | 自适应结构编码、更好的整数/字符串压缩、嵌套随机访问优化 |
| 2.2 | 实验性 | Map 类型、Blob v2、VariablePackedStruct |
| 2.3 | next | 脚手架阶段,编码尚未分化 |
v8 重大变更
- 统一索引生命周期:所有索引构建迁移到基于 segment 的框架,移除旧版 Python Bitmap shard API 和独立的
IndexSegmentBuilder - 新增 FM-Index:基于 Burrows-Wheeler 变换的子串/前缀/正则搜索
- 多 bit IVF_RQ:RaBitQ 支持 1-9 bit,不再限于 1-bit
- 新增存储后端:Volcengine TOS、GooseFS
显著优点
1. 极致随机访问性能:为嵌入检索优化的列式布局,避免 Parquet 的行组解压开销
2. 原生多模态支持:FixedSizeList 向量、JSONB、bfloat16、图像类型、Blob 编码
3. 丰富索引体系:
4. 完整事务支持:15 种事务操作、乐观并发控制(OCC)重试/变基、条件提交处理器
5. 云原生设计:MemWAL 流式写入、分支/标签/时间旅行、S3/GCS/Azure/MinIO/TOS/GooseFS 统一对象存储抽象
- 向量:IVF_PQ、IVF_HNSW、IVF_RQ/RaBitQ(多 bit)
- 标量:BTree、Bitmap、Bloom、LabelList、ZoneMap、FM-Index
- 全文:BM25 + ICU/Jieba/Lindera 分词器
- 地理:RTree
局限与风险
1. 格式版本锁定:数据集创建后 data_storage_version 固定,变更需完整重写
2. 实验性功能不稳定:2.2/2.3 版本编码可能变化,生产环境建议显式锁定 2.1
3. API 变动频繁:v8 移除多个公共 API(IndexSegmentBuilder、load_indices() 等),升级成本较高
4. 分布式构建复杂度:segment-based 索引构建引入两阶段提交,调试难度增加
5. 生态相对封闭:相比 Parquet/Delta Lake,查询引擎集成(DuckDB、DataFusion 等)仍处于适配层
适用场景
- 大模型嵌入存储与检索:十亿级向量的 IVF + PQ/RQ 索引
- 多模态数据湖:图像+文本+结构化特征的统一存储
- 实时 AI 特征平台:MemWAL + 分支实现低延迟写入与版本隔离
- 需要事务保证的湖仓分析:OCC + 条件提交满足一致性要求
风险等级评估
- 数据格式风险:中等——版本锁定机制明确但实验性功能边界模糊
- API 稳定性风险:中高——v8 破坏性变更集中,需关注版本迁移
- 供应链安全:T2 来源——
lance-format/lance开源仓库,Rust 生态标准依赖
与 LanceDB 的区分
Lance = 格式引擎(本 skill),直接消费场景:链接 lance crate、操作 .lance 数据集、构建自定义索引。
LanceDB = 基于 Lance 的数据库产品,增加查询构建器、嵌入注册表、重排序 API、托管云服务——不在本 skill 覆盖范围。