[AI湖仓/多模态/向量存储] Lance + LanceDB = 面向多模态 AI 的开源湖仓格式 + 嵌入式向量数据库

0 序

调研日期:2026-09-09
调研方法:官方文档 / GitHub / PyPI / 公开报道交叉核验
定位:Lance 是一套"为多模态 AI 而生"的开源湖仓格式(文件格式 + 表格式 + 目录规范),LanceDB 是构建在 Lance 之上的多模态 AI 数据平台(嵌入式向量检索库 + 云端/企业版湖仓),二者共享同一存储格式,可无缝互操作。

报告速览

维度 Lance(格式) LanceDB(数据库/平台)
仓库 lance-format/lance(原 lancedb/lance) lancedb/lancedb
定位 开源湖仓格式(file + table + catalog spec) 多模态 AI lakehouse / 嵌入式检索库
语言 Rust 核心 + Python/Java 绑定 Rust 核心 + Python/TypeScript/Rust SDK
许可证 Apache-2.0 Apache-2.0
首次创建 2022-07-07 2023-02-28
Star / Fork(2026-09-09) 7,055 / 842 11,388 / 1,047
最新稳定版 pylance 10.0.0(2026-08-08);Rust crate v12.x 线 lancedb 0.37.1(2026-08-10),0.39.0-beta 线
官网 https://lance.org https://lancedb.com / https://docs.lancedb.com
商业化 开放中立格式(LanceDB Inc. 主导维护) OSS 免费 + LanceDB Cloud(公有测试版)+ LanceDB Enterprise

1 概述

产品介绍

1.1.1 产品定位

  • Lance 是 "The Open Lakehouse Format for Multimodal AI"——一套开源湖仓格式栈,包含文件格式(file format)、表格式(table format)和目录规范(catalog spec)三层,允许在对象存储之上构建完整的湖仓,支撑 AI 工作流:

混合检索(向量 + 全文 + SQL)、特征工程、模型训练、多模态数据(图片/视频/音频/文本/Embedding)管理。

README 的口号是:"Convert from Parquet in 2 lines of code for 100x faster random access, vector index, and data versioning"。

  • LanceDB 是 "The Multimodal AI Lakehouse"——定位为 AI 团队"一个数据层搞定全部 AI 数据生命周期"的平台:数据整理(curation)、特征工程(feature engineering)、检索(search & retrieval)、模型训练(training)围绕同一份数据展开。它既是嵌入式、无服务器(serverless)的向量检索库(进程内运行、直连本地磁盘或对象存储),也提供 LanceDB Cloud(托管服务)与 LanceDB Enterprise(分布式湖仓平台)。

  • 两者关系:Lance 是格式/存储层,LanceDB 是数据平台/应用层。LanceDB 完全构建在 Lance 之上;任何写出的 Lance 数据都可被 Pandas、DuckDB、Spark、Ray 等生态直接读取。

1.1.2 诞生的背景与原因

  • 传统格式不适配 AI/ML 工作负载:Parquet、Iceberg、Delta Lake 等湖仓格式为 SQL 分析而生,在向量检索、快速随机访问、多模态数据存储、特征工程(不重写全表的列演进)等 AI 场景上要么缺失要么低效;TFRecord、WebDataset、JSON/XML 则各自偏科。
  • 创始人经验:CEO Chang She 是 pandas 库的核心贡献者(联合创作者之一),曾任流媒体公司 TubiTV 工程 VP(主导 ML 栈与实验平台),此前是 DataPad CTO/联合创始人、AQR 与 Barclays 量化背景;CTO Lei Xu 来自 Hadoop/Cloudera 生态。两人在构建 AI 数据管线时亲身经历了"传统数据栈在 AI 负载下崩溃"的问题,因此创立 LanceDB,试图把"向量数据库"扩展到真正的"多模态 AI 数据基础设施"。
  • 核心理念:不只是又一个向量数据库,而是一套面向 AI 数据底座的 lakehouse format stack——让训练、检索、分析和 Agent 记忆围绕同一份数据展开("Search More; Manage Less")。

1.1.3 URLs

发展历程

时间 里程碑
2022-01~03 公司通过 Y Combinator W22 孵化(LanceDB Inc.,旧金山)
2022-07-07 Lance 仓库创建(lancedb/lance),Lance 格式开始开发
2023-02-28 LanceDB 仓库创建,正式作为向量数据库对外
2023~2024 种子轮约 800 万美元(CRV、Essence VC、Swift Ventures 领投,YC 支持),累计约 1,100 万美元;2024-05 再获 1,100 万美元轮次
2024-11 前后 Lance 格式 v2 重写完成,性能与可扩展性大幅提升(早期 commit "Versioning support with Appending and Overwrite Dataset" 等迭代)
2025-06-24 $30M A 轮融资(Theory Ventures 领投,CRV、Y Combinator、Databricks Ventures、Runway 参投),累计融资约 4,100 万美元;同日发布 Multimodal Lakehouse 产品套件(LanceDB Enterprise 四大能力:Search / EDA / Feature Engineering / Training);此时开源包累计下载超 2,000 万次
2025 年 LanceDB Cloud 进入公开 Beta(无服务器托管、按用量计费)
2025-09-03 官方案例:CodeRabbit 用 LanceDB 做 AI 代码评审上下文引擎
2025-10-03 Lance 文件格式 2.1 转正稳定(压缩但不影响随机访问)
2025-10 引入 IVF_RQ 索引类型、permutation views 等
2025 年 Lance 研究论文发表于 VLDB 2025(同行评审)
2026-01-12 发布 Lance × DuckDB 扩展,可在 DuckDB 中直接 SQL 查询 Lance
2026-02 RFC #5952:统一事务日志(Metadata V2)设计,推进原子提交/标签/索引一体化
2026-03-09 Lance 文件格式 2.2:Blob V2、嵌套 Schema 演进、原生 Map 类型、压缩优化(官方基准:存储减半、速度不降)
2026-04 Lance 核心内嵌全文检索 tokenizer 栈(全文检索原生化);Lance 项目独立为 lance-format 组织,官网迁移至 lance.org
2026-08-08 pylance 10.0.0 发布(Python >=3.10,支持 Win/Linux/macOS 轮子)
2026-08-28 LanceDB Node SDK 要求 Node >= 22
2026-09-06 LanceDB 0.39.0-beta.4;Lance Rust crate 依赖推进至 v12.0.0-beta.14;新增异步远程 SQL 查询

主要功能

Lance(格式层)

  1. 表达力强的混合检索(Expressive Hybrid Search):同一数据集上组合向量相似度搜索、全文搜索(BM25)与 SQL 分析,全部由规范内的二级索引加速。
  2. 闪电级随机访问:较 Parquet/Iceberg 随机访问快约 100 倍(take / sample 任意行),扫描性能不损失。
  3. 原生多模态数据:图片、视频、音频、文本、Embedding 存于单一统一格式,Blob 高效编码 + 惰性加载(take_blobs 按需取原始字节)。
  4. 数据演化(Data Evolution):新增列并可回填(backfill)数据,无需整表重写——对 ML 特征工程至关重要。
  5. 零拷贝版本管理:ACID 事务、时间旅行(time travel)、标签(tags)、分支(branches),无需额外基础设施。
  6. 丰富生态集成:Apache Arrow、Pandas、Polars、DuckDB、Apache SparkRayTrinoApache Flink,以及开放目录 Apache Polaris、Unity Catalog、Apache Gravitino、Hive Metastore。

LanceDB(平台层)

  1. 快速向量搜索:毫秒级检索数十亿向量(SOTA 索引)。
  2. 综合搜索:向量相似度 + 全文搜索 + SQL,支持混合检索(hybrid search)、过滤(filter)、重排(rerank/RRF)。
  3. 多模态支持:向量、元数据与多模态数据(文本/图像/视频/点云等)同表存储与查询,无需单独的对象存储存放原始素材。
  4. 高级能力:零拷贝自动版本管理;GPU 加速向量索引构建。
  5. 多形态产品
    • LanceDB OSS:100% 开源、嵌入式运行(进程内库),本地或云中运行,无厂商锁定;
    • LanceDB Cloud:无服务器托管服务(公开 Beta),按存储与查询计费;
    • LanceDB Enterprise:PB 级分布式多模态湖仓平台(分布式 Serving 引擎、UDF 特征工程、物化视图、SQL 数据探索)。
  6. 多 SDK 与生态:Python、TypeScript/JavaScript、Rust、REST API;集成 LangChain、LlamaIndex、Arrow、Pandas、Polars、DuckDB 等。

核心优势

  • AI 工作负载一站式:一个格式/一张表同时服务检索、特征、训练,避免"存储 + 特征 + 检索 + 训练"多系统拼接。
  • 随机访问与扫描兼得:无 row group 的列式大页设计 + 行寻址,随机访问 100x 优于 Parquet/Iceberg,同时保持分析扫描性能。
  • 混合检索原生内置:向量 + BM25 全文 + SQL 谓词同一数据集、同一套索引体系,天然适合 RAG / Agent 记忆。
  • 数据演化 = 元数据操作:加列回填不重写全表,特征工程成本低。
  • 零拷贝版本化 + 对象存储直连:ACID、时间旅行、分支/标签开箱即用;完全文件化、无服务器架构,天然适配 S3/GCS/Azure/Tencent COS,冷数据成本低。
  • 开放中立:Apache-2.0,规范公开(lance.org/format),有 VLDB 2025 同行评审论文背书;生态引擎(DuckDB/Spark/Ray/Trino/Flink)与开放目录广泛集成,无厂商锁定。
  • 社区与资本双轮:pandas 作者创立、YC 背书、A 轮 4,100 万美元累计融资、Databricks Ventures 参投;下载量超 2,000 万次(2025-06 口径),Star 增长快(详见发展趋势)。

主要短板

  • API 仍处 0.x/快速演进期:LanceDB Python 包稳定版仍在 0.37.x,社区反馈"每次升级可能有破坏性变更",生产选型需锁版本。
  • OSS 无独立服务进程:嵌入式模式下多服务共享需依赖共享文件系统/对象存储,跨进程并发与权限管理不如服务型向量库(如 Milvus/Qdrant)开箱即用。
  • 小/中数据甜区:第三方测评显示其强项在 10 万~百万级、<=1,000 万向量场景;超大集群能力主要落在 Enterprise/Cloud 付费形态。
  • 检索质量 vs 建索引速度的取舍:2026-08 arXiv 基准显示 LanceDB 以"更快的索引构建"换取部分检索质量(recall),纯检索延迟/召回并非全项第一。
  • 版本线混乱风险:Lance(格式)与 LanceDB(数据库)各自发版节奏不同,格式演进(2.0→2.1→2.2→2.3)与 SDK 版本需对照 migration guide 管理。
  • 文档/中文化:官方文档英文为主,中文社区资料多为二手转述。

局限性

  • 不是通用 OLTP/高并发事务数据库:定位是 AI 数据湖仓 + 检索,不适合替代 MySQL/PostgreSQL 做高频小事务
  • SQL 能力有限:Lance 本身不是查询引擎;SQL 依赖 DuckDB 扩展、DataFusion/Spark 等外部引擎,复杂 SQL 分析需拼接生态。
  • 全文检索生态迁移:早期依赖 Tantivy,2026 年起改为 Lance 内嵌原生 tokenizer,个别老接口(如 legacy tantivy FTS)已移除,升级需注意兼容。
  • 对象存储直连的性能依赖:云端远程对象存储上的随机访问性能受网络/缓存影响,官方文档也提示需根据延迟/规模选存储后端。
  • 格式兼容约定:稳定版 data_storage_version 是长期兼容契约,但"新格式版本对旧 SDK 不可见"——混用版本需显式 pin 版本,next 别名格式严禁用于生产。
  • LLM 幻觉边界:任何数据库/格式都无法替代模型本身质量;检索再快也不保证生成正确。

适用场景

  • RAG / 混合检索:语义搜索 + 关键词(BM25)+ 结构化过滤组合检索(文档、代码、商品、内容推荐)。
  • Agent 记忆(Agent Memory):会话记忆、长程任务上下文、可分支/版本化的评估数据集(可复现 RAG 评测)。
  • 多模态数据管理:图像、视频、音频、点云与 Embedding 同库存储检索(内容平台、医学影像、自动驾驶数据等)。
  • 特征仓库(Feature Store)与数据演化:增量加特征列、回填 Embedding,供模型训练与在线检索共用。
  • 训练数据管线:GPU 喂数前的采样、洗牌、按列投影、随机访问(PyTorch 数据集、permutation views)。
  • 数据整理/质检(Curation):训练集筛选、质量标签、train/eval 划分、版本回溯。
  • 嵌入式/边缘/桌面 AI 应用:无需数据库服务器的本地应用(Chrome 插件、CLI、桌面工具)。
  • 对象存储上的低成本向量检索:直接把 S3/GCS 当数据库用(如 AWS 官方博客的 10 亿向量蛋白序列检索方案)。
  • 代码评审/工程智能(如 CodeRabbit)、多模态内容发现(如 SemanticDotArt)等垂直应用。

同类竞品

格式层面

格式 定位 与 Lance 对比
Parquet / ORC 列式分析格式 分析强、生态最广;无原生向量/全文索引、随机访问慢、无版本管理
Apache Iceberg / Delta Lake 湖仓表格式 SQL 湖仓事实标准、表管理完善;AI 能力(向量检索/多模态/随机访问)需外部系统补齐
Apache Arrow 内存列式格式 是 Lance 的底层数据模型(零拷贝互操作),但本身非持久化存储格式
TFRecord / WebDataset / HDF5 ML 训练数据格式 训练顺序读强;无检索、无 SQL、生态弱
JSON / XML 通用半结构化 灵活;分析/训练都慢,无索引

数据库/检索层面

产品 形态 与 LanceDB 对比
Chroma 嵌入式向量库 上手最易、零配置;并发与大数据量性能弱、功能较薄
Milvus / Zilliz Cloud 分布式向量库 规模与特性全(Tantivy 全文、DiskANN、GPU);部署/运维重
Qdrant Rust 向量库 纯检索延迟优秀、过滤能力强;需自管服务/集群
Weaviate 向量库+图 开箱召回率佳;功能面广但体量偏重
Pinecone 纯托管向量库 托管省心、生态成熟;闭源、成本高、无自托管
pgvector PostgreSQL 扩展 与现有 PG 栈融合;大数据量 ANN 性能与功能受限
Turbopuffer 对象存储向量库 同为"对象存储即数据库"路线;LanceDB 多一层开放格式与生态
FAISS 向量索引库 极致性能;非数据库,无持久化/版本/事务等管理能力
Elasticsearch/OpenSearch 全文+向量 文本检索极强;向量/HNSW 场景适合已用 ES 的团队

第三方基准参考(arXiv 2608.12812,2026-08,SIFT1M):FAISS 单节点吞吐最高(866 QPS);Qdrant 在完整数据库中延迟最优(中位 4.55ms);Weaviate 开箱召回率最优(>99%);LanceDB 以显著更快的索引构建换取部分检索质量。

发展趋势

开源社区活跃趋势

2026-09-09 GitHub API 实测

指标 lance-format/lance lancedb/lancedb
Stars 7,055(2026-05 约 6.4k → 2026-08-30 约 6,999) 11,388(2025 年约 5k+ → 2026-08 约 10.5~11.2k)
Forks 842 1,047
提交数 3,845 2,952
Open Issues 1,086 620
最近 Push 2026-09-09 2026-09-09

两个仓库均保持高频开发(近 24 小时内仍有提交),发版节奏约 2 周一个稳定版;Lance 曾入选 GitHub Trending 与"AI 开源趋势"榜单。Star 走势整体呈加速增长,LanceDB 已突破 1.1 万 Star,Lance 稳定在 7k 附近,属于 AI 基础设施方向头部开源项目。

生态与产品趋势

  • 格式独立中立化:Lance 迁出到独立组织 lance-format,官网 lance.org,强调"开放湖仓格式"而非"某公司的私有格式"(Rerun 等公司已有官方 fork)。
  • AI 数据全生命周期平台化:从"向量数据库"演进为"多模态湖仓"(OSS + Cloud + Enterprise 三形态),向训练数据管线(PyTorch 加载、permutation views)与 Agent 记忆延伸。
  • 格式版本持续演进:2.1(压缩)→ 2.2(Blob V2/复杂类型)→ 2.3 及 Metadata V2(统一事务日志)路线图,压缩比与复杂类型支持持续增强。
  • 生态绑定加深:DuckDB 扩展、Spark/Ray/Trino/Flink 集成、开放目录(Polaris/Unity/Gravitino)接入,向"AI 时代的标准湖仓格式"目标推进。
  • 商业闭环:Cloud 公开 Beta + Enterprise 私有化部署 + 4,100 万美元融资,开源获客 → 托管/企业付费的模式成型。

总结

Lance/LanceDB 正从"最快的多模态向量检索库"成长为"AI 数据基础设施事实标准候选":格式中立开放 + 嵌入式零运维 + 云/企业商业化三线并进;

短期看是 RAG 与 Agent 记忆的首选轻量底座;

中期目标是成为【多模态 AI 湖仓】的 Parquet/ Iceberg 级标准。

2 工作原理与架构

概念术语

术语 含义
Lance 文件格式(File Format) 面向对象存储与随机访问的列式容器:无 row group、按列大页、结构编码(structural encoding),统计信息与搜索结构独立为索引
Lance 表格式(Table Format) 管理 fragment、manifest、删除、Schema 演进与 ACID 提交的表组织方式
Manifest 描述数据集某个版本的不可变清单:完整 Schema(含嵌套字段)、该版本包含的 data fragment 列表、单调递增版本号、索引元数据引用
Fragment 行的水平分区;一个 fragment 可含多个数据文件,各文件贡献部分列
DataFile fragment 内的物理数据文件
Deletion File 记录已删除行(墓碑),实现高效删除而不重写数据
索引格式(Index Formats) 标量索引、向量索引、全文索引、系统索引等冗余搜索结构,作为表的一等公民对象版本化、事务化
目录规范(Catalog Specs) 表的发现/注册/协调:Directory Catalog(V1 目录列举 / V2 Manifest 表)+ REST Catalog
Namespace Client Spec 引擎与任意 catalog 实现交互的统一接口
MVCC(多版本并发控制) 通过不可变 manifest + 事务文件实现快照隔离读写
数据演化(Schema Evolution / Data Evolution) 加列、回填等元数据级操作,不重写全表
data_storage_version 数据集写入时固定的存储格式版本(如 2.0/2.1/2.2/2.3),稳定版本是长期兼容契约
Blob / Blob V2 大二进制对象(图/视频/音频)的存储编码,支持惰性加载与随机取用
向量索引 IVF-PQ、IVF-PQ_RQ、IVF-SQ、IVF-HNSW-PQ、IVF-RQ、HNSW、DiskANN 式磁盘索引等
标量索引 B-Tree、BITMAP、ROW-ID、LABEL_LIST 等过滤加速索引
全文索引(FTS) BM25 倒排索引(Lance 内嵌 tokenizer 原生实现)
Embedded / Serverless LanceDB 以进程内库运行,无独立服务进程,直连本地目录或对象存储
RemoteTable / db:// LanceDB Enterprise/Cloud 的远端表连接方式

架构与运行原理

2.2.1 Lance 分层规格栈

Lance 不是"单一文件格式",而是一组可独立演进的规格栈,各层解耦以避免锁定:

flowchart TB subgraph NS["Namespace Client Spec(统一命名空间接口)"] NS1["引擎(DuckDB / Spark / Ray / Trino...)统一访问任意 Catalog"] end subgraph CAT["目录规范(Catalog Specs)"] C1["Directory Catalog V1(目录列举)"] C2["Directory Catalog V2(__manifest 表)"] C3["REST Catalog(企业级外部清单存储)"] end subgraph IDX["索引格式(Index Formats)"] I1["向量索引:IVF-PQ / HNSW / IVF-RQ / DiskANN 式"] I2["标量索引:B-Tree / BITMAP / ROW-ID"] I3["全文索引:BM25 倒排(内嵌 tokenizer)"] end subgraph TBL["表格式(Table Format)"] T1["Fragments(行分区)× DataFiles(列子集)"] T2["Manifest(不可变版本清单)"] T3["Deletion / 事务文件 / MVCC / ACID 提交"] T4["Schema 演进 + 时间旅行 + 标签/分支"] end subgraph FIL["文件格式(File Format)"] F1["列式大页(无 Row Group)"] F2["结构编码 + 压缩"] F3["Blob V2 大对象惰性加载"] F4["行寻址 → 快速随机访问"] end NS --> CAT CAT --> TBL TBL --> IDX TBL --> FIL

各层职责

  • 文件格式:只关心"列数据如何落盘/解码"。按列独立写大页(page),达到 page size 后刷盘,避免 Parquet 式 row group 的扫描-随机访问耦合;统计信息与搜索结构不进文件格式,留给索引层独立演进。
  • 表格式:两维组织——行按 fragment 水平分区,每个 fragment 可含多个只写部分列的数据文件。于是加列 = 只写新文件 + 更新 manifest,成为元数据操作而非数据重写(这就是"数据演化"的机制来源)。每次提交(commit)通过事务文件产生新 manifest,实现版本化、时间旅行与 ACID。
  • 索引格式:索引是表的一等对象,随 manifest 事务化、版本化;文件编码与索引格式相互解耦,可独立升级。
  • 目录规范:Directory Catalog V1 靠目录列举发现表;V2 用一张 __manifest 的 Lance 表跟踪嵌套命名空间,规模化更好;REST Catalog 提供企业级 API 并可作外部 manifest 存储。
  • Namespace Client Spec:给引擎统一入口,屏蔽底层 catalog 实现差异。

2.2.2 LanceDB 运行时架构

flowchart LR subgraph APP["应用进程(Embedded 模式)"] SDK["Python / TypeScript / Rust SDK"] CORE["LanceDB 核心(Rust)"] LANCE["Lance 格式读写 / 索引 / 事务"] end subgraph ST["存储层(模块化、磁盘优先)"] S1["本地磁盘 / NVMe / EBS / EFS"] S2["S3 兼容对象存储(含腾讯 COS)"] S3["Azure Blob Storage"] S4["Google Cloud Storage"] end subgraph SRV["Serverless / 分布式形态"] CLOUD["LanceDB Cloud(托管、按用量计费)"] ENT["LanceDB Enterprise(分布式路由/查询执行/后台任务)"] end SDK --> CORE --> LANCE LANCE --> ST CORE -- "db:// URI + API Key" --> SRV

运行原理要点

  1. 嵌入式无服务器:LanceDB OSS 是进程内库,connect("本地目录") 即可用,无独立服务、无网络延迟、无运维负担;数据以 Lance 文件形式直接落在存储上,索引即存储(vector、metadata、原始 payload 以不可变 fragment 形式共存于同一对象存储桶)。
  2. 存储计算分离connect("s3://... / gs://... / az://...") 直连云端对象存储;存储层模块化设计(磁盘优先组件),可跑在本地 NVMe、EBS、EFS 或任意 S3 兼容 API 上。云端随机访问性能受网络/缓存影响,文档要求按延迟、规模、成本目标选后端。
  3. 检索执行:向量搜索走 ANN 索引(IVF-PQ / HNSW / IVF-RQ / DiskANN 式等),标量过滤走二级索引(B-Tree/BITMAP 等),全文走 BM25 倒排;混合检索可组合向量 + 全文 + SQL 谓词,支持 RRF 重排。2026 年起支持异步远程 SQL 查询。
  4. 版本与并发:所有写操作(插入/删除/更新/加列/建索引)产生新版本,MVCC 保证快照一致;表可分支(branch)用于可复现实验,可时间旅行回溯。
  5. 规模化路径:OSS 单进程共享应用 CPU 池,并发查询会竞争 CPU → 需要更大规模时切 LanceDB Enterprise(分布式集群分离 routing/query execution/后台任务,按节点扩容)或使用 Cloud 托管。

3 使用指南

安装部署(Windows / Linux / macOS)

Lance 与 LanceDB 均提供预编译轮子/包Windows、Linux、macOS 三平台均可直接安装,无需本地 Rust 工具链

LanceDB(Python)

# Windows / Linux / macOS
pip install lancedb

# 或使用 uv
uv add lancedb

# 安装最新预览版(约每 2 周一个稳定版,预览版保留至少 6 个月)
pip install --pre --extra-index-url https://pypi.fury.io/lancedb/ lancedb

# 旧 CPU(无 AVX2,如 Sandy Bridge/Ivy Bridge/Westmere、AMD Bulldozer 等)需装兼容包
pip install lancedb-compat
  • 要求 Python >= 3.10;默认轮子面向 x86-64-haswell(AVX2+FMA),lancedblancedb-compat 不可共存,切换需先卸载。
  • 可用 lance.simd_info() 查看实际 SIMD 档位。

Lance 格式(Python,包名 pylance)

pip install pylance
# 预览版
pip install --pre --extra-index-url https://pypi.fury.io/lance-format pylance

TypeScript / Node.js

npm install @lancedb/lancedb

2026-08 起要求 Node >= 22。

Rust

cargo add lancedb

DuckDB 扩展(SQL 查询 Lance)

INSTALL lance;
LOAD lance;

源码编译(贡献者模式)

需 Rust 工具链(rustup)、Python 3.10+、protoc(>= 3.20);核心为 Rust crate(lance),Python 绑定用 PyO3/maturin,Java 绑定用 JNI。

最简示例(必读)

"""
@env
  pip install pylance -i https://mirrors.aliyun.com/pypi/simple/
@links
  [1] Lance 中的全文搜索 - https://lance.net.cn/quickstart/full-text-search/
"""
import lance
import pyarrow as pa

table = pa.table(
    {
        "id": [1, 2, 3],
        "text": [
            "I left my umbrella on the morning train to Boston",
            "This ramen recipe simmers the broth for three hours with dried mushrooms.",
            "This train is scheduled to leave for Edinburgh at 9:30 AM",
        ],
        "category": ["travel", "food", "travel"],
    }
)

# Temp write dataset
lance.write_dataset(table, "./fts_test_with_metadata.lance", mode="overwrite")

ds = lance.dataset("./fts_test_with_metadata.lance")

# Create FTS index
ds.create_scalar_index(
    column="text",
    index_type="INVERTED",
)

# Run FTS query with metadata filter
query_result = ds.to_table(
    full_text_query="three hours",
    filter='category = "food"',
)

print(f"{query_result}")
# Returns
# id: [[2]]
# text: [["This ramen recipe simmers the broth for three hours with dried mushrooms."]]
# category: [["food"]]

image

关键操作

1. 连接数据库

import lancedb
db = lancedb.connect("ex_lancedb")          # 本地目录(嵌入式)
db = lancedb.connect("s3://bucket/path")    # 对象存储直连(gs://、az:// 同理)
# db:// 为 Enterprise/Cloud 远端连接(需 api_key / region / host_override)

2. 建表(含向量、元数据、结构化字段一行同存)

data = [
    {"id": "1", "name": "King Arthur", "role": "King", "stats": {"strength": 4, "magic": 1}, "vector": [0.7, 0.1, 0.9, 0.7]},
    {"id": "2", "name": "Merlin", "role": "Wizard", "stats": {"strength": 2, "magic": 5}, "vector": [0.2, 0.9, 0.4, 0.9]},
]
table = db.create_table("characters", data=data, mode="overwrite")

3. 向量 / 混合搜索

# 向量搜索 + 列投影
table.search([0.2, 0.8, 0.4, 0.9]).select(["name", "role", "_distance"]).limit(2).to_pandas()

# 加过滤(curation 常用:按质量标签 / 数值字段 / 时间窗过滤)
table.search(query_vector).where("stats.magic >= 4").limit(2).to_pandas()

# 全文 / 混合搜索(Lance 层示例)
import lance
ds = lance.dataset("s3://my-bucket/docs")
ds.to_table(full_text_query="machine learning")
ds.to_table(nearest={"column": "embedding", "q": query_vec, "k": 10}, filter="year > 2020")

4. 数据演化(加列,不重写全表)

table.add_columns({"power_score": "cast(((stats.strength + stats.magic) / 2.0) as float)"})

5. 多模态数据存取

# Lance 层:按行取大对象原始字节(Blob 惰性加载)
blobs = ds.take_blobs("video", ids=[2, 51])

6. Parquet → Lance 转换(1 行代码)

import lance, pyarrow as pa, pyarrow.dataset
tbl = pa.Table.from_pandas(df)
lance.write_dataset(pa.dataset.dataset("/tmp/x.parquet", format="parquet"), "/tmp/x.lance")
# 读取即 Arrow Dataset,可直连 Pandas / DuckDB / Polars

7. 构建向量索引

ds.create_index("vector", index_type="IVF_PQ", num_partitions=256, num_sub_vectors=16)
# 也可选 HNSW / IVF-RQ / IVF-SQ / DiskANN 式等;支持 GPU 构建

8. DuckDB SQL 查询 Lance

INSTALL lance; LOAD lance;
SELECT * FROM lance_scan('/path/to/data.lance') LIMIT 10;

Z FAQ for Lance/LanceDB

Q: Lance 和 LanceDB 到底是什么关系?我该用哪个?

Lance 是存储格式(文件+表+目录规范),LanceDB 是数据库/平台(基于 Lance 构建)。纯数据工程/训练场景可以只用 Lance(pylance)写读文件;要做检索(RAG、Agent 记忆、推荐)用 LanceDB;两者数据完全互通,LanceDB 表就是 Lance 数据集。

Q: 需要自己部署服务器吗?

OSS 不需要——嵌入式进程内运行,pip install lancedb 后连个目录就能用;数据可放本地或对象存储。需要共享/大规模/托管时再用 LanceDB Cloud(托管)或 Enterprise(私有化分布式)。

Q: 支持哪些存储后端?

本地磁盘、AWS S3 及兼容对象存储(含腾讯 COS)、Azure Blob Storage、Google Cloud Storage;URI 前缀 s3://gs://az:// 自动选择后端,db:// 连 Enterprise。

Q: 支持全文检索和 SQL 吗?

支持。BM25 全文搜索原生内置(Lance 内嵌 tokenizer);SQL 通过 DuckDB 扩展(INSTALL lance; LOAD lance;)或 Spark/Trino/Flink 等引擎;还可向量 + 全文 + SQL 混合检索并 RRF 重排。

Q: 数据量多大合适?性能如何?

官方与第三方观点:百万级以下开箱即用(第三方称 1,000 万向量内亚毫秒级);SIFT 100 万×128 维平均查询 <1ms(官方 2023 M2 MacBook Air 基准);随机访问较 Parquet/Iceberg 快约 100 倍。数十亿向量建议走 Cloud/Enterprise(AWS 官方博客有 10 亿向量 S3 方案)。注意 2026-08 arXiv 基准提示其召回率非顶尖,以快建索引换检索质量。

Q: 版本兼容性怎么保证?

Lance 数据集写入时固定 data_storage_version(2.0~2.3),稳定版本是长期兼容契约;SDK 变更遵循语义化版本并走 migration guide;next 别名格式仅供实验,禁用于生产。生产请锁稳定版(如 pylance 10.0.0 / lancedb 0.37.1)。

Q: 与 Chroma / Milvus / Qdrant / Pinecone 怎么选?*

  • 快速起步、嵌入式、中小规模、多模态 + 混合检索 → LanceDB
  • 极简原型、纯小规模 → Chroma;
  • 需要分布式、GPU、完整运维特性(数十亿级)→ Milvus/Zilliz 或 Qdrant 集群;
  • 全托管省心、预算充足 → Pinecone;
  • 已有 PostgreSQL 栈、规模不大 → pgvector。

Q: 谁在用 / 商业可持续吗?

公开案例:CodeRabbit(AI 代码评审);AWS 官方博客(10 亿向量蛋白序列检索方案)。公司累计融资约 4,100 万美元(A 轮由 Theory Ventures 领投,YC、Databricks Ventures、Runway 参投),Cloud 已公测,Enterprise 面向私有化大客户。开源免费 + 云/企业付费模式。

Q: 新手学习路径?

官方 Quickstart(docs.lancedb.com/quickstart)→ Lance 格式规范(lance.org/format)→ vectordb-recipes 教程仓库 → VLDB 2025 论文 → Discord 社区。

Y 推荐文献

X 参考文献

posted @ 2026-09-10 09:29  千千寰宇  阅读(27)  评论(0)    收藏  举报