Recern Vector DB · 0.2.0

向量数据库, 一个文件就够。

Recern Vector 0.2.0 是面向 Rust、Python、Node.js 和 CLI 的嵌入式向量数据库,提供本地快照与 WAL、HNSW 搜索、int8 存储,以及查询执行过程说明。

pip install recern-vectorv0.2.0 发布说明(英文)
Rust · Python · Node.js · CLI · MIT OR Apache-2.0

Recern Workspace · 演示数据库

Recern Workspace 展示 payment_patterns int8 演示集合的实测召回率和延迟曲线。

在 payment_patterns int8 集合上测量不同 ef 值下的召回率和延迟。

Recern Workspace · 演示数据库 · 召回率

在 payment_patterns int8 集合上测量不同 ef 值下的召回率和延迟。

基准结果发布于 2026-10-07,早于 0.2.0;这些数据未测量 int8 或新过滤规划器的性能。

1.30×

SIFT1M 上召回率为 0.95 时,相对于 faiss HNSW 的吞吐量

1.78×

GloVe-100 上的同项对比

35s

使用 14 核为一百万个向量构建索引的耗时

0.11ms

SIFT1M 上召回率为 0.983 时的查询延迟中位数

为什么选择 Recern Vector

轻量,便于嵌入。 开放,便于理解。

01

可迁移的快照

变更提交到带校验和的 WAL。单独复制 .rvec 快照前,应暂停写入并先调用 checkpoint();否则必须同时保留相匹配的快照和 WAL。

02

无需服务器

可通过 Rust、Python、原生 Node.js 绑定或 CLI 在应用内运行。支持平台的 Node.js 二进制文件附在发布版本中,尚未发布到 npm。

03

内部运行清晰可见

每次搜索都可报告搜索策略、访问过的节点、过滤选择率和耗时。统计信息展示图层、内存使用和搜索无法到达的记录,还可使用自己的数据测量召回率。

使用示例

搜索之后,了解它如何执行

从 Python 和命令行访问同一个数据库。右侧输出来自一次在 20,000 条记录上使用元数据过滤器的真实运行。

import recern_vector as rv

db = rv.Database.open_or_create("docs.rvec")
docs = db.create_collection("docs", dim=384, metric="cosine")
docs.upsert_many(ids, embeddings, metadatas)

hits = docs.search(query, k=5, filter={"lang": "en"})
docs.explain(query, k=5)  # strategy, visited nodes, time
$ recern-vector query docs.rvec docs --like doc-42 -k 3 \
    --filter '{"lang": "en", "year": {"$gte": 2020}}' \
    --explain

  #  id          distance  metadata
  1  doc-42      -0.00000  {"lang":"en","year":2024}
  2  doc-18861    0.63155  {"lang":"en","year":2022}
  3  doc-10899    0.63834  {"lang":"en","year":2024}

  strategy      hnsw
  ef            64
  selectivity   ~19.9% of records match the filter
  visited       7,244 nodes
  distances     7,330 computed
  time          529 µs

Python 绑定直接接收 NumPy float32 数组,无需逐元素转换。批量插入使用全部核心构建索引。

0.2.0 功能

现已支持

  • HNSW 与精确搜索

    图索引支持按集合配置 m、ef_construction 和 ef_search;需要基准真值时可使用精确扫描。

  • 余弦、L2 与点积

    每个集合使用固定维度和距离度量。使用余弦度量的向量在存储时会归一化。

  • 元数据过滤

    支持相等、$in、范围及嵌套的 $and、$or、$not。成本规划器采样评估过滤选择率,选择精确搜索或 HNSW,并调整搜索工作量。

  • 并行原子插入

    批量插入使用全部核心构建索引。只要有一个向量无效,就不会写入任何数据。

  • Upsert、删除与压实

    按 ID 替换或删除记录,再通过压实重建集合,移除已删除的记录。

  • 内省 API

    stats()、explain() 和 estimate_recall() 是 API 的组成部分,无需独立工具。

  • Python 绑定

    面向 CPython 3.11 及以上版本的 PyO3 wheel,附带类型提示。

  • 命令行工具

    init、create-collection、insert、query、inspect、recall、checkpoint 和 compact。

  • 稳定的格式 2

    提供版本化文件、校验和与基准样本兼容性测试,同时仍可读取现有的格式 1 快照。

  • WAL 与检查点

    save() 将变更页提交到 WAL;checkpoint() 写出独立完整的快照。恢复时会忽略末尾因中断而不完整的记录。

  • 可选 int8

    按集合使用 int8 编码,每个向量有独立的缩放系数。可用自己的数据测量召回率,选择存储与精度之间的平衡。

  • 原生 Node.js 绑定

    提供 Node-API 8、TypeScript 类型定义,以及在工作线程运行的 searchAsync。GitHub 发布版本中包含 Linux x64、macOS arm64 和 Windows x64 构建。

基准测试

相同召回率下,比 faiss HNSW 更快

在 Apple M3 Max 上从 Python 逐条执行查询,每项结果下方显示延迟中位数。完整报告还包含索引构建时间、磁盘占用、测试方法和限制。

recall@10 ≥ 0.95 时的每秒查询数

引擎SIFT1MGloVe-100
Recern VectorHNSW9,0410.11 ms6351.60 ms
faissHNSWFlat6,9610.15 ms3562.83 ms
LanceDBIVF_HNSW_SQ7311.34 ms未达到
LanceDBIVF_PQ, tuned2454.03 ms1675.93 ms
sqlite-vecexact scan1283.79 ms7140.43 ms
阅读完整报告(英文)
开发状态

Recern Vector 0.2.0 与后续计划

  1. 已支持

    0.2.0

    • 稳定文件格式与兼容性测试
    • WAL 与增量磁盘写入
    • 可选 int8 向量存储
    • AND / OR / NOT 元数据过滤
  2. 下一步

    后续改进

    • 降低保存时完整镜像的编码开销
    • 自动检查点
    • npm 平台包与加载器
  3. v0 暂无计划

    不在范围内

    • 服务器模式
    • 分片与复制
    • GPU 加速
    • 云服务

数据库仍需完整装入内存。WAL 减少磁盘写入,但 save() 仍会编码并比较完整镜像。检查点需显式执行;并发写入会串行化,状态过期的写入方必须重新打开数据库。

Recern Workspace

工作空间的一部分

Workspace 可检查 pgvector 列和索引、服务器支持的 Redis 搜索索引与向量集合,以及包含已提交 WAL 变更的 Recern Vector 快照。Recern Vector 集合支持召回率检查,包括 f32 和 int8 存储。

探索工作空间