Recern Vector DB · 0.2.0

ベクトルデータベースを、 ひとつのファイルに。

Recern Vector 0.2.0 は Rust、Python、Node.js、CLI に対応する組み込みベクトルデータベースです。ローカルのスナップショットと WAL、HNSW 検索、int8 ストレージ、クエリの実行内容を確認できる機能を備えています。

Rust · Python · Node.js · CLI · MIT OR Apache-2.0

Recern Workspace · デモデータベース

payment_patterns int8 デモコレクションの再現率とレイテンシの実測曲線を表示する Recern Workspace。

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 コアで 100 万ベクトルのインデックスを構築する時間

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 を選んで探索量を調整します。

  • 並列かつアトミックな挿入

    一括挿入では全コアを使ってインデックスを構築します。ベクトルが 1 件でも無効な場合、書き込みは行われません。

  • 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 を提供します。Linux x64、macOS arm64、Windows x64 向けのビルドは GitHub リリースから取得できます。

ベンチマーク

同じ再現率で faiss HNSW より高速

Apple M3 Max 上で Python からクエリを 1 件ずつ実行し、各数値の下にレイテンシの中央値を表示しています。完全なレポートには、インデックス構築時間、ディスク上のサイズ、測定方法、制約も記載しています。

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 の両方で再現率を測定できます。

ワークスペースを見る