LanceDB 向量数据库手册
LanceDB 向量数据库手册
适用版本:lancedb 0.41.0(PyPI / GitHub v0.41.0,2026-10-29,使用 Lance 14.0.2,核实于 2026-11) 许可与形态:Apache 2.0(OSS)、LanceDB Enterprise 为商业版(
db://);嵌入式 in-process 库,无独立服务端进程 一句话定位:把向量表当成进程内列式数据集来读写的嵌入式向量库,无服务端但可直接读写s3:///gs://对象存储 约定:$普通用户、#root 或 sudo、<xxx>为占位符;标 ⚠️ 的是高危操作。 更新时间:2026-11(版本与 API 变化快,执行前请以官方文档复核)
目录
1. 它是什么、什么时候选它
1.1 定位与架构
LanceDB OSS 是嵌入式 in-process 库:它不作为守护进程运行,而是被应用进程以 import lancedb 直接加载,向量表以 Lance 列式格式落在本地目录或对象存储上。理解这一点,就能解释它和另外两类形态的所有差别:
| 维度 | LanceDB(OSS) | Chroma(对比) | Vespa(对比) |
|---|---|---|---|
| 进程模型 | 嵌入式、无 server 进程 | 嵌入式 或 client-server 或 Cloud | 独立服务进程 + schema 部署 |
| 接入方式 | 库函数调用 lancedb.connect(uri) |
客户端对象 + 可选 HTTP 服务 | HTTP /search/ + YQL |
| 数据落点 | 本地路径 / s3:// / gs:// / az:// |
本地目录 / 服务端目录 / 云端 | 服务节点本地 + 分发 |
| 是否有监听端口 | 无 | client-server 有(8000) | 有(8080 / 19071) |
| 健康检查端点 | 无(无服务端) | 有 heartbeat | 有部署就绪检查 |
⚠️ 形态要点:OSS 无独立服务端进程、无 HTTP 健康检查端点;关于是否存在官方 Docker 镜像,官方未给出明确声明(官方资料标为未核实,见第 11 章),不要照搬第三方「LanceDB 官方镜像」的说法,以官方文档为准。嵌入式不等于「只能读本地」——它可直接读写对象存储
s3:///gs:///az://。
1.2 与同类产品的本质差别
与「先起服务再连」的分布式库不同,LanceDB 没有服务端进程、没有端口、没有集群控制面;它把可靠性交给底层存储(本地文件系统 / 对象存储),把并发与生命周期交给宿主应用。代价是:多进程共享、鉴权、限流、监控都要在应用层或存储层解决。Cloud 形态由 LanceDB Enterprise 以 db:// URI 提供。
版本差异:
Python SDK / Node / Rust / Lance 格式版本号分属不同线,不可混用;写锁定脚本时只固定lancedb的 pip 版本,别把 Lance 格式版本当 SDK 版本。
1.3 适合 / 不适合
适合:① 单机 / 少进程、想要零服务运维的 RAG、检索脚本与边缘应用;② 数据已在 S3 / GCS 等对象存储、希望库直接读写而不搬数据;③ 多模态 / 大宽表(列式存储、向量与标量同表);④ 需要版本化数据集、与 Arrow / Pandas 生态紧密结合的流水线;⑤ 原型到中等规模、能接受在应用层做并发与鉴权。
不适合:① 需要独立服务端、HTTP/gRPC 接口、集中鉴权与多租户配额的多客户端在线服务;② 需要成熟 Prometheus 端点 / 官方 Helm chart 直接交付 K8s(本篇多处标为以官方文档为准);③ 强依赖服务端自动管理索引、期望「追加即入索引」且不愿处理刷新逻辑的团队(OSS 需 refresh,见第 5、9 章);④ 老旧 x86_64 CPU 无 AVX2 且不便换 lancedb-compat 的环境。
1.4 规模参考(经验值,非官方承诺)
单表十万 ~ 百万级向量常用于原型与中小规模;维度常见 768 / 1024 / 1536;QPS 受对象存储延迟、IVF_PQ 参数、是否走索引影响。以上均为经验值,官方未给承诺数值,须以自身数据压测为准。
1.5 在链路中的位置
文档切片 → Embedding 模型 → [LanceDB 表: vector + text + subject 列] → table.search(qv).where(...).limit(k) → Top-K → 重排 / LLM 生成。以图搜图同理,把图片 embedding 与标签写成同表列,where 用 SQL 表达式过滤。若数据本来就在 S3,可直接 lancedb.connect("s3://<bucket>/<path>") 省去数据搬迁。
2. 版本、许可与官方入口
2.1 版本状态表
| 版本 / 线 | 时间 | 状态 | 备注 |
|---|---|---|---|
lancedb 0.41.0(PyPI) |
核实于 2026-11 | 当前 pip 稳定版 | requires_python >=3.10,依赖 pylance>=14.0.2 |
GitHub v0.41.0 |
2026-10-29 | 稳定 tag | 使用 Lance 14.0.2 |
v0.42.0-beta.4 |
预发布 | 勿用于生产 | 约每 2 周发布一次 |
| LanceDB Enterprise | 滚动 | 商业版 | db:// URI,索引自动管理 |
版本差异:Python SDK / Node / Rust / Lance 格式 四条版本线不同;
lancedb-compat与标准包冲突,二选一;v0.42.0-beta.4是预发布,勿写进生产锁定文件。
2.2 许可证与商业版边界
| 范围 | 许可 / 模式 | 边界 |
|---|---|---|
| OSS(嵌入式) | Apache 2.0 | 可自建、商用、改源码;索引刷新需自行处理 |
| LanceDB Enterprise | 商业(db://) |
托管能力,追加行自动入索引(OSS 需 refresh) |
2.3 官方 URL 表
2.4 版本识别命令
$ python3 -m pip show lancedb pylance
$ python3 -c "import lancedb; print(lancedb.__version__)"
$ node -e "console.log(require('@lancedb/lancedb/package.json').version)"
2.5 近两年重要变更与弃用提醒
- metric 显式化:建索引省略
metric默认按 l2,非 l2 场景会退化为 flat(见第 5、9 章)。 - 索引异步化:
create_index()异步;追加行不会自动入索引,OSS 需 refresh,Enterprise 自动(可用wait_for_index(...))。 - AVX2 依赖:默认 wheel 需 AVX2;老 CPU
import lancedb会Illegal instruction,改用lancedb-compat。 - 版本线分离:Python SDK / Node / Rust / Lance 格式不可混用版本号。
3. 安装与启动
3.1 依赖与前置条件
Python >=3.10、依赖 pylance>=14.0.2;默认 wheel 需要 AVX2 指令集;对象存储形态需对应 SDK / 凭证(如 S3 的 IAM 权限);嵌入式无需起服务、无需监听端口、无需容器。
3.2 方式一:Python(pip,主路径)
$ python3 -m pip install lancedb
# 老 x86_64 CPU 无 AVX2 时用 compat 包(与标准包冲突,二选一,不要同时装)
$ python3 -m pip install lancedb-compat
3.3 方式二:Node.js / Rust
$ npm install @lancedb/lancedb
$ cargo add lancedb
3.4 启动 / 连接(无服务端,等价于「打开数据库」)
嵌入式没有「启动服务」这一步,connect(uri) 即打开 / 创建数据集:
import lancedb
db = lancedb.connect("ex_lancedb") # 本地目录
# db = lancedb.connect("s3://<bucket>/<path>") # 直读 S3
# db = lancedb.connect("gs://<bucket>/<path>") # 直读 GCS
3.5 目录与端口表
| 项 | 值 | 说明 |
|---|---|---|
| 监听端口 | 不适用 | 无服务端进程,不监听任何端口 |
| 健康检查端点 | 无 | 无 HTTP 服务,验证靠 connect + 打开表 |
| 本地数据目录 | connect("ex_lancedb") 指定 |
相对 / 绝对路径均可 |
| 对象存储 | s3:// gs:// az:// |
直接读写,无需搬运 |
| Enterprise | db:// |
商业托管 URI |
⚠️ 形态要点:官方 Docker 镜像 / 健康检查端点这类「服务端才有」的概念,在 OSS 嵌入式形态下不适用;其中是否存在官方 Docker 镜像,官方未明确声明(未核实,见第 11 章),请以官方文档为准,勿假定有镜像或 chart。
3.6 启动后健康检查与连通性验证
import lancedb
db = lancedb.connect("ex_lancedb")
print(db.table_names()) # 能列出表名即连通;无服务端可 curl
3.7 生产最小配置建议
| 项 | 建议 |
|---|---|
| CPU 指令集 | 先确认 AVX2;老机器改用 lancedb-compat 且与标准包二选一 |
| 数据落点 | 生产优先对象存储(s3://)+ 生命周期 / 版本控制,本地目录须独立卷 |
| 凭证 | S3/GCS 凭证走 IAM Role / 环境变量,不写进代码库 |
| 版本固定 | 锁定 lancedb==0.41.0 与 pylance 版本;.0-beta.* 不进生产 |
| 并发 | 多进程写同一表须在应用层协调;无服务端限流 / 鉴权 |
| 索引刷新 | 追加数据后规划 refresh + wait_for_index(...),否则新行不进索引 |
4. 核心概念与数据模型
4.1 术语对照表
| LanceDB 术语 | 通用术语 | 关系型类比 |
|---|---|---|
connect(uri) |
打开数据库 | 建立连接(但无网络服务) |
| Table | 向量表 / 数据集 | 一张表 |
vector 列 |
稠密向量列 | 定长浮点数组列 |
where("...") |
标量过滤 | WHERE(SQL 表达式字符串) |
search(qv) |
相似度检索 | ORDER BY 距离 LIMIT k |
create_index |
建 ANN 索引 | CREATE INDEX |
| Lance 格式 | 底层列式存储格式 | 存储引擎 |
4.2 数据模型层级
Database(connect(uri))→ Table(列式 Lance 数据集)→ Row: 各命名列(含一个向量列)。表由 data 推断 schema(列式,向量是固定长度 list[float]),标量列与向量列同表存放,天然支持 SQL 表达式过滤。
4.3 字段与向量类型
| 字段 | 形态 | 说明 |
|---|---|---|
| 主键类列 | 如 id: int |
示例用业务 id,用于 where 定位 |
| 向量列 | 固定长度 list[float] |
示例用 3 维,实际常见 768 / 1024 / 1536 |
| 标量列 | text / subject 等 |
用于 where("subject = 'history'") |
| 维度 | 由首行数据推断 | 追加行维度必须一致 |
4.4 距离度量与方向
metric |
说明 | 方向 |
|---|---|---|
l2(默认) |
欧氏距离 | 距离越小越相似 |
cosine |
余弦 | 距离越小越相似 |
dot |
内积 | 符号 / 换算以官方文档为准 |
经验性表述:距离类度量(l2 / cosine)通常值越小越相似;
dot的返回符号约定官方资料未逐字确认,以官方文档为准。查询度量必须与建索引一致,否则会退化为 flat(全表精确扫描)。
4.5 索引类型与关键参数
| 索引类型 | 说明 |
|---|---|
IVF_PQ |
IVF 分区 + 乘积量化 |
IVF_RQ |
RaBitQ,压缩约 1/32 |
IVF_HNSW_SQ / IVF_HNSW_FLAT / IVF_HNSW_PQ |
IVF 分区内用 HNSW 子结构 |
HNSW 只作 IVF 分区内子结构,不是独立顶层索引。官方警告:带
where过滤时优先IVF_RQ/IVF_PQ(HNSW 系延迟方差大)。
create_index 关键参数(官方 Quickstart 逐字):metric、index_type、vector_column_name。
4.6 写入 → 建索引 → 可检索的生命周期
create_table(..., data=...)建表并立即写入,未建索引时走精确 / flat 扫描;2.create_index(metric=..., index_type=..., vector_column_name=...)异步提交;3. 可用wait_for_index(...)等待索引就绪;4. 追加行不会自动入索引——OSS 需 refresh,Enterprise 自动;5. 一致性模型:嵌入式基于 Lance 数据集快照,多进程并发写的一致性由应用层 / 存储层保证,官方资料未给出官方承诺。
5. 快速上手:完整 CRUD 示例
以下基于官方 Quickstart 当前写法,import 齐全、变量均有定义、可整体复制运行。示例用 3 维向量(实际常见 768 / 1024 / 1536)。
import lancedb
# 1) 连接:嵌入式,uri 为本地目录(也可 s3:// / gs://)
db = lancedb.connect("ex_lancedb")
# 示例用 3 维;实际常见 768 / 1024 / 1536 维
data = [
{"id": 1, "vector": [1.0, 0.0, 0.0], "text": "第一章 向量检索导论", "subject": "history"},
{"id": 2, "vector": [0.0, 1.0, 0.0], "text": "第二章 索引结构", "subject": "history"},
{"id": 3, "vector": [0.0, 0.0, 1.0], "text": "第三章 生产运维", "subject": "ops"},
]
# 2) 创建表:data 非空即从数据推断 schema
table = db.create_table("my_table", data=data)
# 3) 插入(追加行)
table.add([{"id": 4, "vector": [0.9, 0.1, 0.0], "text": "第四章 容量规划", "subject": "ops"}])
query_vec = [1.0, 0.0, 0.0]
# 4) 相似度检索(未建索引时走 flat 精确扫描)
print("== 纯向量检索 ==")
print(table.search(query_vec).limit(2).to_list())
# 5) 带标量过滤检索:SQL 表达式字符串
print("== 带过滤检索 ==")
print(table.search(query_vec).where("subject = 'history'").limit(2).to_pandas())
# 6) 建向量索引:必须显式 metric,否则默认 l2 会让 cosine 场景退化
table.create_index(metric="cosine", index_type="IVF_PQ", vector_column_name="vector")
# 7) 更新:按条件改写列值
table.update(where="id = 1", values={"subject": "intro"})
# 8) 删除:按条件
table.delete(where="id = 3")
# 9) 读回校验
print("== 读回校验 ==")
print(table.to_pandas())
# 10) 清理:删表
db.drop_table("my_table")
旧教程会写成什么:①
table.create_index(index_type="IVF_PQ", vector_column_name="vector")——省略metric,默认按 l2 建索引;若查询用 cosine / dot,会退化为 flat(全表精确扫描),延迟暴涨。当前写法必须显式metric="cosine"。② 旧文常以为create_index()是同步的、且追加行会自动入索引——实际create_index()异步、追加行不会自动入索引(OSS 需 refresh,Enterprise 自动),可用wait_for_index(...)等待。③ 旧 SDK 省略 metric 默认发 l2,是历史高发坑。
补充说明:连接 / 建表 /
search/where/create_index的签名以官方 Quickstart 逐字写法为准;上例的update/delete/to_pandas/drop_tableupdate / delete 等方法请以官方 API 参考为准,参数细节以官方文档为准。
输出怎么读:to_list() 返回 dict 列表,to_pandas() 返回 DataFrame。
| 字段 / 列 | 含义 | 读法 |
|---|---|---|
_distance |
与查询向量的距离 | 距离类度量下值越小越相似;dot 约定以官方文档为准 |
vector / text / subject |
原表列 | 与命中行同序,用于展示与二次过滤 |
id |
业务主键 | 用于回查与更新定位 |
第 4 步
limit(2)取 Top-2;第 5 步叠加where("subject = 'history'")后候选收敛,结果可能少于 2 条——属过滤收敛而非故障。第 6 步建索引后,若查询度量与metric不一致会退化为 flat,须显式保持一致。
REST / cURL 等价示例:不适用。LanceDB 是嵌入式库、无服务端、无 HTTP 接口,因此不存在 cURL 等价写法;等价的「跨环境切换」是换 connect 的 URI:
db_s3 = lancedb.connect("s3://<bucket>/<path>") # 直读对象存储
db_gs = lancedb.connect("gs://<bucket>/<path>")
6. 索引与检索进阶
6.1 索引参数调优表
| 参数 | 默认值 | 影响 | 建议范围 |
|---|---|---|---|
metric |
l2 |
必须与查询度量一致,否则退化 flat | 显式写 l2 / cosine / dot |
index_type |
以官方文档为准 | 决定召回 / 延迟 / 内存 | IVF_PQ / IVF_RQ 优先(带 where 时) |
vector_column_name |
必填 | 指定向量列 | 与表 schema 列名一致 |
limit(k) |
调用时必填 | 返回条数 | 结合 Top-K,通常 5~100 |
where |
无 | 过滤越严格候选越少 | 优先收敛再取 Top-K |
除上述 Quickstart 逐字参数外的 IVF / PQ 细分参数(分区数、量化位宽等)官方资料官方未明确,本表不列默认值;以官方索引文档为准。
6.2 召回率 recall 与延迟的取舍
近似 IVF 索引以少量召回损失换低延迟。经验做法:先用未建索引的 flat 结果做基线,对比建索引后的 Top-K 交集测 recall;先固定 limit(k) 与 metric,再调 index_type。官方明确带 where 过滤时优先 IVF_RQ / IVF_PQ(HNSW 系延迟方差大)。
6.3 标量过滤的 pre / post-filter 行为
where 用 SQL 表达式字符串。官方资料未明确其 pre/post-filter 实现细节;经验性表述:过滤越严格候选越少、结果可能少于 limit(k);若「过滤后召回明显偏低」,先用 table.to_pandas() / 计数核对满足条件的基数,再判断是数据问题还是检索行为,勿假定索引损坏。
6.4 混合检索、多向量 / 稀疏向量 / 重排
官方资料未提供 LanceDB 的 BM25 / RRF / 多向量 / 稀疏向量 / 重排的官方条目,本篇不臆造方法名;如需混合检索,以官方文档确认能力,或在上层框架做两路召回再融合(经验做法)。量化方面,IVF_RQ(RaBitQ)压缩约 1/32、IVF_PQ 为乘积量化,二者是降低内存占用的主要手段。
6.5 内存与磁盘容量估算(经验公式)
公式:向量大小 ≈ N × D × 4B(float32);IVF_PQ / IVF_RQ 索引 ≈ 量化后码本 + 分区结构,远小于原始向量;总占用 ≈ 向量 + 索引 + 标量列 + Lance 元数据/版本快照。示例:N=100 万、D=768 → 原始向量约 1e6 × 768 × 4B ≈ 2.86 GiB,PQ / RQ 量化后索引显著更小,但对象存储会保留多版本快照,容量按实测为准。此为经验估算,非官方承诺。
7. 生产部署与运维
7.1 形态选择决定运维模型(重点)
| 形态 | 高可用 | 监控 | 运维主体 |
|---|---|---|---|
| OSS 嵌入式(本地) | 无服务端 HA,靠宿主与存储 | 无监控端点,靠宿主应用 | 应用自身 |
OSS + 对象存储 s3:// / gs:// |
靠对象存储持久性 / 多进程各自打开 | 靠宿主应用 + 云监控 | 应用 + 云 |
Enterprise db:// |
厂商托管 | 厂商控制台 | 厂商 |
版本差异:再强调——OSS 无独立服务端、无监听端口、无 HTTP 健康检查端点;关于官方 Docker 镜像 / Helm chart,官方未明确声明(未核实,见第 11 章)。排障时先确认「是不是在找本不存在的服务端」——很多「连不上 / 健康检查 404」根因是把嵌入式当服务用。
7.2 高可用 / 集群 / 分片 / 副本
OSS 无服务端控制面:水平扩展 = 多个应用进程各自 connect 同一对象存储路径;分片 / 副本由应用或对象存储承担。写入并发须应用层协调(无服务端锁 / 限流)。Enterprise 的 HA 能力以厂商文档为准。
7.3 备份与恢复(含索引是否需重建)
| 形态 | 备份对象 | 恢复要点 |
|---|---|---|
| 本地目录 | 数据目录(Lance 数据集 + 版本快照) | 停写后拷贝,同版本打开 |
| 对象存储 | bucket / prefix 的数据与清单 | 用对象存储版本控制 / 跨区复制 |
| Enterprise | 厂商侧备份 | 以厂商文档为准 |
⚠️ 危险:Lance 格式版本与 SDK 版本分属不同线,跨大版本不要直接复用旧数据集目录当升级手段;先导出再导入。备份时须包含索引文件,否则恢复后可能需重建索引并重新
wait_for_index(...)。
7.4 监控端点与关键指标、告警阈值建议
OSS 没有 Prometheus 端点 / 健康检查端点(无服务端)。建议自建监控:宿主进程存活、对象存储请求错误率与延迟、磁盘 / bucket 使用率(>80% 预警)、查询 P99 延迟、索引刷新滞后(未入索引行数)。阈值为经验建议,按自身 SLA 调整。
7.5 容量规划与扩缩容
按 6.5 估算;扩缩容 = 扩应用进程 / 换机型 / 扩对象存储,无需扩「数据库集群」。单表瓶颈优先「显式 metric + 合适 index_type + 减 limit(k) + 加 where 收敛」。
7.6 升级与跨版本迁移
① 用 pip show lancedb pylance 锁定当前版本;② 备份数据集(含索引);③ 升级 SDK,用新会话 connect 打开并跑抽样检索;④ 因索引可能需重建,规划 create_index + wait_for_index(...) 的停机 / 双写窗口;⑤ 校验条数与抽样结果一致后切流。
7.7 安全基线
| 项 | 建议 |
|---|---|
| 认证 / 鉴权 | 嵌入式库内无认证,靠对象存储 IAM / 应用侧鉴权 |
| TLS | 对象存储访问走 HTTPS;db:// 走厂商通道 |
| 网络暴露面 | 无监听端口,不暴露服务;仅暴露应用自身 |
| 凭证 | S3 / GCS / db:// 凭证走 IAM Role / 密钥管理,不写进代码库 |
| 日志位置 | 无独立服务日志;日志由宿主应用输出,用应用日志采集链路 |
8. 高频故障与排障
| 症状 | 可能原因 | 定位命令 / 方法 | 处置 |
|---|---|---|---|
import lancedb 报 Illegal instruction |
老 CPU 无 AVX2,默认 wheel 不支持 | grep -o avx2 /proc/cpuinfo | head -1 |
改装 lancedb-compat,且与标准包二选一 |
| 连不上 / 健康检查 404 | 把嵌入式当服务用、去找服务端端口 | 确认代码里是 lancedb.connect(uri) |
去掉 curl / 端口假设,改用打开表验证 |
| 写入失败 | 追加行维度 / schema 与首行不一致 | 打印 table.schema 与新行 len(vector) |
对齐列与维度 |
| 查不到 / 召回低 | 查询度量与建索引 metric 不一致,退化 flat |
核对 create_index(metric=...) |
显式指定并保持 metric 一致 |
| 查询慢 | 未建索引 / 退化为 flat / limit 过大 |
检查是否已 create_index、是否显式 metric |
重建索引、收敛 limit、加 where |
| OOM | 数据量大 / 未量化 | 按 6.5 估算 | 选 IVF_PQ / IVF_RQ 量化,扩内存 |
| 磁盘 / bucket 满 | 对象存储多版本快照累积 | 查 bucket 用量与版本数 | 配置生命周期 / 清理旧快照 |
| 索引不生效 | create_index() 异步未完成 / 追加行未入索引 |
wait_for_index(...) 后复测 |
等待索引、OSS 执行 refresh |
| 版本升级后报错 | SDK 与 Lance 格式版本线混用 | pip show lancedb pylance |
固定配套版本,导出 / 导入迁移 |
| 过滤结果变少 | where 收敛候选 |
用 to_pandas() 数满足条件的行 |
属预期行为,调条件或提升候选 |
| 对象存储访问被拒 | IAM 权限 / 凭证缺失 | 云侧审计日志、connect 报错 |
补 IAM 授权、凭证走环境变量 |
9. 常见坑与避坑清单
- 现象:建了索引却越来越慢。原因:
create_index省略metric,默认 l2,与 cosine 查询不一致退化为 flat。怎么做:建索引显式写metric="cosine"并与查询保持一致。 - 现象:新写入的行检索不到(走索引时)。原因:追加行不会自动入索引。怎么做:OSS 定期 refresh;Enterprise 自动;用
wait_for_index(...)等待索引就绪。 - 现象:以为
create_index()返回即索引可用。原因:该调用异步。怎么做:wait_for_index(...)后再压测 / 切流。 - 现象:老机器
import直接崩。原因:默认 wheel 需 AVX2。怎么做:换lancedb-compat,且与标准包二选一,别同时装。 - 现象:带
where过滤时延迟忽高忽低。原因:用了 HNSW 系索引,官方提示延迟方差大。怎么做:带过滤优先IVF_RQ/IVF_PQ。 - 现象:把 HNSW 当独立索引类型选。原因:HNSW 只是 IVF 分区内子结构。怎么做:顶层选
IVF_*类型。 - 现象:找健康检查端点 / Docker 镜像找不到。原因:OSS 无服务端;官方 Docker 镜像是否存在未明确声明。怎么做:不臆造端点与镜像,以官方文档为准。
- 现象:多进程同时写出现冲突。原因:无服务端并发控制。怎么做:应用层协调写入,或改用对象存储 + 单写多读。
- 现象:升级后数据集打不开。原因:SDK / Lance 格式版本线混用。怎么做:固定配套版本,走导出 / 导入。
- 现象:照第三方配 Prometheus 端点 404。原因:嵌入式无监控端点。怎么做:监控做在宿主应用与云监控侧。
- 现象:
dot度量排序方向判断错。原因:dot返回符号约定官方未明确。怎么做:以官方文档为准,先用小样本验证再上生产。 - 现象:对象存储费用 / 容量超预期。原因:Lance 多版本快照累积。怎么做:配置生命周期规则清理旧版本。
⚠️ 危险:
db.drop_table("my_table")与删除对象存储 prefix 都不可逆;执行前确认已备份、且连的是测试 / 目标环境而非生产数据集。
⚠️ 危险:跨大版本直接复用旧数据集目录、或在不重建索引的情况下切流,可能导致索引与数据不一致、检索结果静默错误;升级须走备份 + 重建索引 + 抽样校验。
10. 速查表
10.1 命令 / API 速查
| 操作 | 命令 / 代码 | 说明 |
|---|---|---|
| 安装 Python SDK | pip install lancedb |
需 AVX2、Python >=3.10 |
| 老 CPU 兼容包 | pip install lancedb-compat |
与标准包冲突,二选一 |
| 安装 Node SDK | npm install @lancedb/lancedb |
Node 版本线独立 |
| 安装 Rust crate | cargo add lancedb |
Rust 版本线独立 |
| 看版本 | python3 -m pip show lancedb pylance |
版本识别 |
| 连接本地 | db = lancedb.connect("ex_lancedb") |
本地目录 |
| 连接 S3 | db = lancedb.connect("s3://<bucket>/<path>") |
直读对象存储 |
| 连接 GCS | db = lancedb.connect("gs://<bucket>/<path>") |
直读对象存储 |
| Enterprise | db = lancedb.connect("db://...") |
商业托管 |
| 列所有表 | db.table_names() |
连通性验证 |
| 建表 | db.create_table("t", data=data) |
从 data 推断 schema |
| 追加行 | table.add(rows) |
不会自动入索引 |
| 相似度检索 | table.search(qv).limit(2).to_list() |
返回 dict 列表 |
| 带过滤检索 | table.search(qv).where("subject = 'history'").limit(2).to_pandas() |
SQL 表达式 |
| 建索引 | table.create_index(metric="cosine", index_type="IVF_PQ", vector_column_name="vector") |
异步、显式 metric |
| 等索引 | table.wait_for_index(...) |
等待异步索引 |
| 更新 | table.update(where="id = 1", values={"subject":"intro"}) |
按条件 |
| 删除行 | table.delete(where="id = 3") |
按条件 |
| 删表 | db.drop_table("t") |
⚠️ 不可逆 |
| 读全表 | table.to_pandas() |
校验 / 计数 |
10.2 常用端口与路径
| 项 | 值 |
|---|---|
| 监听端口 | 不适用(无服务端进程) |
| 健康检查端点 | 无 |
| 本地数据目录 | connect("ex_lancedb") 指定 |
| 对象存储 | s3:// / gs:// / az:// |
| Enterprise | db:// |
11. 参考与延伸
11.1 官方文档链接清单
11.2 与同册其他产品的关系
需要独立服务端 / HTTP 接口:见同目录 Chroma.md(client-server 形态)或 Vespa.md(服务化);schema-first + YQL + 滚动发布见 Vespa.md;融合到现有 PostgreSQL 见 ../02-融合型向量能力/pgvector.md(若已存在);纯索引库(非数据库)见 ../03-向量索引库/。
11.3 进阶阅读方向
① 官方 Quickstart 与「Vector Index」文档:create_index 全量参数、IVF_PQ / IVF_RQ 调优;② 对象存储(s3:// / gs://)直读的凭证与一致性模型;③ Lance 格式版本与多版本快照 / 生命周期管理;④ 混合检索与重排能力以官方文档确认后再接入。
11.4 本篇「未核实 / 以官方为准」事项(官方资料明确标注)
以下条目官方资料标为「未核实」,正文未写作确定事实,执行前必须以官方文档复核:
- LanceDB OSS 无 Docker 镜像的官方明确声明——官方资料未取得官方原文,正文仅说明「OSS 为嵌入式库、无独立服务端;是否存在官方 Docker 镜像以官方文档为准」,不得写成「官方明确声明无镜像」或臆造镜像仓库地址。
补充:OSS 无独立服务端 / 无监听端口 / 无 HTTP 健康检查端点、
s3://gs://az://直读、metric 默认 l2、索引异步、追加行不自动入索引、AVX2 与lancedb-compat、版本线分离均属已核实事实;但 IVF / PQ 细分参数、dot返回符号约定、混合检索 / 多向量 / 稀疏向量能力、Enterprise 具体规格等细节仍以官方文档为准。