核心用法
Lance 是一个面向多模态 AI 的开源列式数据格式,号称"随机访问比 Parquet 快 100 倍"。它不是单一格式,而是一套互操作的规范栈:文件格式、表格式、索引格式、目录规范和命名空间客户端规范。Rust 工作空间 lance-format/lance 实现了全部规范,并提供 Python (pylance) 和 Java 绑定。
本技能针对 v8.0.0-beta.14,包含 25 个 crate 的完整工作空间:
- 入口 crate:
lance(Dataset、扫描器、索引、提交) - 核心 crate:
lance-table(manifest、提交处理器)、lance-file(文件读写)、lance-encoding(结构编码)、lance-index(各类索引)、lance-io(对象存储) - 新增:
lance-derive(v8 新增,#[derive(DeepSizeOf)])
文件格式版本
| 版本 | 状态 | 说明 |
|------|------|------|
| 2.0 | stable | 移除 row groups,支持 null |
| **2.1** | **默认 (stable)** | 自适应结构编码、更好的压缩、嵌套随机访问 |
| 2.2 | unstable | Map 类型、Blob v2、VariablePackedStruct |
| 2.3 | unstable (`next`) | 脚手架阶段,无独立编码 |
关键特性
- 索引: IVF_PQ、IVF_HNSW、IVF_RQ(RaBitQ,v8 支持 1-9 bit)、多 bit RQ、FM-Index(v8 新增,Burrows-Wheeler 子串/前缀/正则搜索)
- 并发控制: OCC(乐观并发控制)重试/变基、条件提交处理器、DynamoDB 提交处理器
- 写入模式: MemWAL 流式写入、两阶段分布式提交
- 数据管理: 模式演进(零拷贝列增删改)、版本控制、时间旅行、标签、分支、稳定行 ID
- 对象存储: 支持 S3、GCS、Azure、Aliyun OSS、Tencent COS、Volcengine TOS、GooseFS 等
显著优点
1. 极致随机访问性能: 专为 ML 工作负载设计,随机访问远优于 Parquet
2. 原生向量搜索: 内置多种 ANN 索引(IVF_PQ/HNSW/RQ),v8 新增 FM-Index 标量索引
3. 模式演进友好: 字段 ID 机制支持零拷贝列增删改,旧行自动读为 NULL
4. 企业级并发: OCC 重试机制、条件提交处理器、分布式两阶段提交
5. 多模态原生: 支持 Blob、FixedSizeList 向量、JSONB、图像类型、bfloat16
6. 云原生: 深度对象存储集成,支持多种云厂商和 GooseFS 缓存层
潜在缺点与局限性
1. 格式版本锁定: 创建时选择的 data_storage_version 固定不可变,需重写数据集才能变更
2. 实验性功能风险: 2.2/2.3 版本编码可能变化,生产环境建议锁定 2.1
3. v8 破坏性变更:
4. API 稳定性: beta 版本每几天发布,需锁定 tag 而非跟踪 main
5. 语言绑定局限: Python/Java 绑定可能滞后于 Rust 核心功能
- 移除
IndexSegmentBuilderAPI - Bitmap 索引构建方式完全改变
finish()返回类型变更describe_indices()/list_indices()行为变更
适合人群
- ML/AI 工程师: 需要高效向量存储和相似度搜索
- 数据平台开发者: 构建 Lakehouse 架构,需要列式格式 + 对象存储
- Rust 开发者: 直接使用
lancecrate 构建数据系统 - 多模态应用开发者: 需要统一存储图像、文本、向量、标量数据
常规风险
| 风险类型 | 说明 | 缓解建议 |
|----------|------|----------|
| 版本兼容性 | beta 版本间格式/编码可能变化 | 锁定 `v8.0.0-beta.14` tag,避免跟踪 main |
| 实验性功能 | 2.2/2.3 编码不稳定 | 生产使用 `stable`(2.1),显式设置版本 |
| 破坏性升级 | v7→v8 索引 API 重大变更 | 仔细迁移索引构建代码,测试 `create_index_uncommitted` 新流程 |
| OCC 冲突 | 高并发写入可能触发重试 | 合理设置 `CommitConfig.num_retries`(默认 20),考虑指数退避 |
| 对象存储一致性 | 最终一致性存储上的提交竞争 | 使用条件提交处理器或 DynamoDB 提交处理器 |
Lance vs LanceDB
关键区分: 本技能覆盖 Lance 格式和引擎(lance-format/lance),而非 LanceDB 数据库产品(lancedb/lancedb)。LanceDB 在 Lance 之上添加查询构建器、嵌入注册表、重排序器 API 和托管云服务。如果直接链接 lance crate,使用本技能;如果问题涉及 LanceDB 内部存储层,本技能仍是格式层面的权威参考。