嵌入式向量库是什么
嵌入式向量库把检索做进本地文件或轻量进程:LanceDB 基于列式格式与向量索引,适合数据分析与边缘场景;SQLite 生态也有向量扩展可用。它们适合单机、原型与批量任务,省去服务端运维,随应用一起分发;代价是并发写入、强过滤与横向扩展能力有限,规模上去之后迁到服务化方案更稳妥。
基本信息
| 代表实现 | LanceDB(列式格式)、SQLite 向量扩展 |
|---|---|
| 适用场景 | 单机、原型、批量任务、边缘设备 |
| 优点 | 无服务端、部署简单、随文件分发 |
| 局限 | 并发写入与强过滤能力有限 |
| 扩展方式 | 横向扩展需要自建 |
| 迁移时机 | 需要多租户、高并发或强一致过滤时 |
典型使用场景
- 桌面或边缘设备上的本地语义检索
- 数据分析场景中与列式数据一起处理
- 批量离线任务,随任务创建与销毁
- 小型内部工具,避免维护服务端
- 原型阶段快速验证,后续再迁服务化
LanceDB 使用示意
LanceDB 使用示意
import lancedb
db = lancedb.connect("./lance_db") # 本地目录即为数据库
tbl = db.create_table("kb", data=[
{"id": "c1", "vector": [0.1] * 384, "text": "片段一"},
])
res = tbl.search([0.1] * 384).limit(5).to_list() # 近邻检索
print(res)
# 数据以文件形式存在,随应用一起分发与备份嵌入式与服务化对照
| 维度 | 嵌入式 | 服务化 |
|---|---|---|
| 部署 | 随应用分发,无服务端 | 需要部署与运维 |
| 并发写入 | 有限,需要在应用层串行化 | 引擎内置处理 |
| 过滤与聚合 | 基础能力 | 能力更完整 |
| 横向扩展 | 需要自建 | 引擎支持分片或集群 |
嵌入式方案省去服务运维,但并发写入、强过滤与横向扩展需要自己补;规模上去后迁到服务化方案更稳妥。
嵌入式文件属于单机资源:多进程或多副本同时写入会出现锁冲突,线上服务不宜直接共用同一个数据文件。
嵌入式库的数据就是一个目录:备份与迁移直接拷贝文件即可,但拷贝期间要确保没有写入,否则可能拿到不一致的中间状态。