一、官方信息
| 项目名称 | LanceDB |
| 仓库地址 | https://github.com/lancedb/lancedb |
| 官方网站 | https://lancedb.com/ |
| 最新更新 | 2026 年活跃迭代 |
| 项目定位 | 基于 Lance 列式格式的无服务器(Serverless)向量数据库 |
| 开源协议 | Apache-2.0 |
二、项目背景
向量数据库长期面临一个矛盾:为了"可维护"你得拉起一个常驻服务(Postgres、Redis、Milvus),但为了"查询向量"又不得不把数据搬到另一个专门系统里,导致数据要在数据仓库和向量库之间反复同步。LanceDB 想从根本上解决这个问题——它把向量库做成了一个文件格式 + 嵌入式库,而不是一个服务。
LanceDB 背后是 Lance 列式数据格式(Arrow 的优化版,专为 AI / 向量负载设计)。所有数据(向量、原始文本、图片、标签)都以 Lance 文件形式存在本地磁盘或对象存储(S3)里,查询时直接由进程内的引擎扫描文件完成,不需要任何后台服务。这就是"无服务器(Serverless)"的含义:没有数据库进程要运维,没有端口要开放,没有主从要管。
这种架构带来几个独特优势:数据天然是列式格式,可以直接被 Pandas / PyArrow / DuckDB 分析;可以直接把整库放在 S3 上做"湖仓一体"的向量检索;移动端 / 边缘设备也能嵌入式运行。LanceDB 在多模态 RAG、图像检索、AI 训练数据集管理领域增长很快。
三、核心特性
- 无服务器架构:嵌入式库,零运维,无需常驻进程。
- 基于 Lance 格式:列式存储,支持高维向量、原始媒体、元数据混合存储。
- 云原生存储:数据可直接存本地磁盘或 S3 / GCS / Azure Blob。
- 多模态支持:原生支持图片、视频、音频向量与特征。
- 时间旅行:Lance 格式带版本快照,可查历史版本。
- SQL / Pandas 互操作:数据可直接导出为 Arrow / Pandas。
- 高性能索引:IVF_PQ、HNSW,支持磁盘索引降低内存。
- 多语言 SDK:Python / JS / Rust / Java。
四、环境要求
- Python 3.9 ~ 3.12。
- 操作系统:Linux / macOS / Windows。
- 嵌入式使用无需 Docker;如需远程服务另有 LanceDB Cloud / 自托管。
- 内存:建议 2GB 以上。
五、详细部署步骤
方式一:pip 嵌入式(推荐)
pip install lancedbimport lancedb
# 连接本地目录(自动创建)
db = lancedb.connect("./lancedb_data")
# 准备数据
data = [
{"vector": [0.1, 0.2, ...], "text": "第一篇文档", "source": "a.pdf"},
{"vector": [0.9, 0.8, ...], "text": "第二篇文档", "source": "b.pdf"},
]
# 创建表(首次写入)
table = db.create_table("docs", data=data)
# 后续追加
table.add([{"vector": [0.3]*128, "text": "第三篇"}])
# 相似度搜索
query = [0.15, 0.25, ...]
results = table.search(query).limit(3).to_list()
print(results)方式二:配合 Embedding 函数自动向量化
pip install lancedb openaiimport lancedb
from lancedb.embeddings import get_registry
from lancedb.pydantic import LanceModel, Vector
db = lancedb.connect("./lancedb_data")
func = get_registry().get("openai").create(name="text-embedding-3-small")
class TextDoc(LanceModel):
text: str = func.SourceField()
vector: Vector(func.ndims()) = func.VectorField()
table = db.create_table("docs", data=[TextDoc(text="你好世界")], mode="overwrite")
# 查询时自动向量化问题
results = table.search("什么是向量数据库").limit(2).to_pandas()
print(results)方式三:数据存到 S3
import lancedb
db = lancedb.connect("s3://my-bucket/lancedb/")
# 需配置 AWS 凭证:AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY方式四:Docker 自托管 API(可选)
docker run -d --name lancedb \
-p 8000:8000 \
-v $(pwd)/lancedb_data:/data \
lancedb/lancedb:latest验证部署
python -c "import lancedb; db=lancedb.connect('/tmp/test'); print(db.name); print('OK')"六、使用方法
- 嵌入式模式:pip 安装后
lancedb.connect(路径)即用,无账号密码。 - 表操作:
create_table / open_table / add / search / delete / update。 - 搜索链式调用:
table.search(query).where("source='a.pdf'").limit(5),支持元数据过滤。 - 结果可直接
.to_list() / .to_pandas() / .to_arrow(),方便做数据分析。 - LangChain 集成:
from langchain_community.vectorstores import LanceDB。
七、常见问题 FAQ
Q1:LanceDB 真的不需要起服务吗?
A:是的,嵌入式模式下它就是个 Python 库,数据是本地文件。需要远程访问时才用自托管 API 或 LanceDB Cloud。
Q2:和 Chroma 有什么区别?
A:两者都轻量;LanceDB 底层是列式 Lance 格式,更偏数据湖 / 多模态 / 大规模分析,Chroma 更偏轻量 RAG 原型。
Q3:数据存在哪里?
A:connect() 指定的本地目录(每个表一个子目录),或 S3 路径。
Q4:支持向量维度是多少?
A:任意维度,常用 384 / 768 / 1024 / 1536,建表时按你 embedding 模型实际维度传。
Q5:如何建索引加速?
A:数据量大后调用 table.create_index() 建立 IVF_PQ 或 HNSW 索引。