向量数据库选型指南:VexDB-Lite 如何用一个内核同时加速 PostgreSQL、DuckDB 和 SQLite
【免费下载链接】VexDB-LiteA cross-platform vector database, which can be integrated into existing databases as a plugin.项目地址: https://gitcode.com/gh_mirrors/ve/VexDB-Lite
VexDB-Lite是一款跨平台向量数据库检索引擎,以插件形式嵌入 PostgreSQL、DuckDB 和 SQLite:三个后端共享同一套自研图索引算法、SIMD 距离计算内核和 PQ/RaBitQ 量化压缩模块。对于需要在业务库、分析库和端侧设备上统一做向量检索的团队,它给出了"一次内核、三端复用"的选型答案。
一核多库:VexDB-Lite 的整体架构
大多数向量数据库选型难题在于:业务数据在 PostgreSQL、分析数据在 DuckDB、App 本地在 SQLite,三套系统往往意味着三套向量索引实现、三份维护成本。VexDB-Lite 的思路反过来——把核心算法收敛到一个共享内核,适配层只做"胶水"。
共享内核位于 common/ 目录,包含四个关键组件:
| 组件 | 路径 | 作用 |
|---|---|---|
| 自研图索引算法 | common/include/graph_index/ | 层级图结构、邻居选择、增量更新 |
| SIMD 距离计算 | common/distance/ | SSE4.1 / AVX2 / AVX-512 / NEON 运行时分发 |
| PQ 产品量化 | common/quantizer/ | K-means 训练、编码、ADC 距离 |
| RaBitQ 量化 | common/rabitq/ | 量化码图遍历,L2 / 余弦 / 内积均支持 |
三个适配层则非常薄:
- PostgreSQL(vexdb_pg/):注册
vexdb_graph索引访问方法、floatvector(N)向量类型、WAL 持久化; - DuckDB(vexdb_duckdb/):提供
GRAPH_INDEX索引类型,优化器自动改写为VEXDB_INDEX_SCAN; - SQLite(vexdb_sqlite/):以虚拟表 + Shadow Table 承载
GRAPH_INDEX,面向端侧与嵌入式场景。
这意味着三个引擎的召回行为、量化语义、距离语义天然一致——SQLite 侧甚至做过跨引擎 800 组向量对照测试,用 float64 真值仲裁,确保三端结果对齐(见 vexdb_sqlite/README.md)。
选型建议:什么时候选哪个引擎?
同一个内核之下,三个适配层各有明确定位,选型可以按"数据放在哪"直接决定:
| 维度 | PostgreSQL 插件 | DuckDB 扩展 | SQLite 扩展 |
|---|---|---|---|
| 向量类型 | floatvector(N) | 原生FLOAT[N] | 虚拟表GRAPH_INDEX |
| 距离算子 | <->、<~>、<=> | <->、<~>、<=> | MATCH+ 距离函数 |
| 典型场景 | 在线业务库、事务写入 | 离线分析、湖仓查询 | 移动端、IoT、嵌入式 |
| 特色能力 | 并行构建、共享内存向量缓冲 | 带 WHERE 过滤的 ANN 查询 | PQ/RaBitQ + 低内存压缩 |
| 支持版本 | PostgreSQL 16 ~ 19 | DuckDB v1.5.2 | SQLite ≥ 3.38 |
一句话总结:PostgreSQL 选"事务在线",DuckDB 选"分析过滤",SQLite 选"端侧轻量"。详细能力矩阵见 README.md,版本与架构支持见 documentation/compatibility.md。
性能实测:SIFT-1M 上比 pgvector 快多少?
在 SIFT-1M(128 维)基准测试中(m=16、ef_construction=128,Intel Core Ultra 7 平台),VexDB-Lite 对主流内置方案的提升非常直观:
| 系统 | QPS(ef=50,单线程) | QPS(ef=100,单线程) |
|---|---|---|
| pgvector | 507.9 | 313.4 |
| vexdb_lite(PostgreSQL) | 994.7 | 618.5 |
| duckdb-vss | 496.1 | 405.2 |
| vexdb_lite(DuckDB) | 717.5 | 547.2 |
同等 Recall@10 下,PostgreSQL 侧约快1.9 倍,DuckDB 侧约快1.45 倍。性能来自两个内核能力:
- 运行时 SIMD 分发——同一份代码在 x86 上自动选择 AVX2/AVX-512,在 ARM 上选择 NEON,无需针对 CPU 重新编译;
- PQ / RaBitQ 量化——索引中只存量化码而非原始向量,
memory_mode='compact'时内存占用大幅下降,适合向量规模远超内存的场景。
完整基准数据见 README.md 第 7 节,功能参数文档见 documentation/features.md。
上手体验:以 PostgreSQL 为例
以最常见的在线场景为例,核心操作只有四步:装扩展 → 建表 → 建图索引 → 查最近邻。
CREATE EXTENSION vexdb_lite; CREATE TABLE items (id BIGSERIAL PRIMARY KEY, vec floatvector(128)); CREATE INDEX idx_items_vec ON items USING vexdb_graph (vec floatvector_l2_ops) WITH (m = 16, ef_construction = 64, parallel_workers = 4); SET vexdb.ef_search = 100; SELECT id, vec <-> '[0.15, 0.25, 0.35]' AS dist FROM items ORDER BY vec <-> '[0.15, 0.25, 0.35]' LIMIT 10;建索引时还可追加quantizer = 'pq'或'rabitq'开启量化压缩;DuckDB 与 SQLite 的写法大同小异,分别参考 documentation/features.md 中的 DuckDB 与 SQLite 小节。
在 AI 应用侧,向量检索是 Agent 记忆、RAG 检索、以图搜图的基础设施——项目自带的 iOS 演示 examples/ios/VexDBLiteDemo/ 就用 SQLite 适配层在真机上实现了图片向量检索,可以直接参考其用法。
兼容性速查:跨平台覆盖矩阵
- CPU 架构:x86_64(SSE4.1/AVX2/AVX-512)与 AArch64(NEON,ARMv8.2+),运行时自动选择最优 SIMD 实现;
- 操作系统:Linux x86_64 / aarch64 均有预编译产物(manylinux_2_28),macOS arm64 支持源码构建,移动端 iOS 有完整 Demo;
- 数据库版本:PostgreSQL 16 ~ 19、DuckDB v1.5.2、SQLite ≥ 3.38。
⚠️ 小提示:DuckDB 扩展与运行时版本严格绑定,加载前建议先执行
SELECT version()确认是 v1.5.2。
总结
VexDB-Lite 的选型价值在于降低向量数据库的多引擎维护成本:图索引、距离计算、量化压缩全部收敛在common/一个内核里,PostgreSQL 管事务、DuckDB 管分析、SQLite 管端侧,而召回质量与性能表现三端一致。如果你的团队同时维护多套数据库,这或许是向量数据库选型中"一份投入、三处受益"的务实方案。
更多资料:
- 项目总览与基准测试:README.md
- 功能与参数文档:documentation/features.md
- 版本兼容矩阵:documentation/compatibility.md
- SQLite 端侧适配细节:vexdb_sqlite/README.md
- 三端共享测试规范:tests/spec/
【免费下载链接】VexDB-LiteA cross-platform vector database, which can be integrated into existing databases as a plugin.项目地址: https://gitcode.com/gh_mirrors/ve/VexDB-Lite
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考