持ち運べるスナップショット
変更はチェックサム付きの WAL にコミットされます。.rvec スナップショットだけをコピーする場合は、書き込みを停止した状態で先に checkpoint() を呼び出してください。それ以外の場合は、対応するスナップショットと WAL をセットで保持してください。
Recern Vector 0.2.0 は Rust、Python、Node.js、CLI に対応する組み込みベクトルデータベースです。ローカルのスナップショットと WAL、HNSW 検索、int8 ストレージ、クエリの実行内容を確認できる機能を備えています。
pip install recern-vectorv0.2.0 リリースノート(英語) Recern Workspace · デモデータベース

payment_patterns int8 コレクションで、ef 値ごとの再現率とレイテンシを測定。
2026-10-07 公開の、0.2.0 より前のベンチマーク基準値です。int8 や新しいフィルタープランナーの性能は測定していません。
SIFT1M、再現率 0.95 での faiss HNSW に対するスループット比
GloVe-100 での同じ条件による比較
14 コアで 100 万ベクトルのインデックスを構築する時間
SIFT1M、再現率 0.983 でのクエリレイテンシ中央値
変更はチェックサム付きの WAL にコミットされます。.rvec スナップショットだけをコピーする場合は、書き込みを停止した状態で先に checkpoint() を呼び出してください。それ以外の場合は、対応するスナップショットと WAL をセットで保持してください。
Rust、Python、ネイティブ Node.js バインディング、CLI でアプリケーション内から実行できます。対応プラットフォームの Node.js バイナリはリリースに添付されています。npm にはまだ公開されていません。
検索ごとに、戦略、訪問ノード数、フィルターの選択性、所要時間を確認できます。統計にはグラフの各層、メモリ使用量、検索で到達できないレコードが表示され、自分のデータで再現率を測定できます。
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 µsPython バインディングは NumPy の float32 配列を要素ごとに変換せず受け取ります。一括挿入では、すべてのコアを使ってインデックスを構築します。
コレクションごとに m、ef_construction、ef_search を設定できるグラフインデックスと、正解データが必要なときに使える厳密スキャンを備えています。
コレクションごとに次元数と距離尺度を固定します。コサイン用のベクトルは保存時に正規化されます。
等値、$in、範囲、入れ子の $and・$or・$not に対応します。コストプランナーがフィルターの選択性をサンプリングし、厳密検索か HNSW を選んで探索量を調整します。
一括挿入では全コアを使ってインデックスを構築します。ベクトルが 1 件でも無効な場合、書き込みは行われません。
ID を指定してレコードを置換・削除し、その後コンパクト化で削除済みレコードを除いたコレクションを再構築できます。
stats()、explain()、estimate_recall() は別ツールではなく、API の一部です。
CPython 3.11 以降向けの PyO3 wheel。型ヒントを含みます。
init、create-collection、insert、query、inspect、recall、checkpoint、compact。
バージョン付きファイル、チェックサム、固定データによる互換性テストを備え、既存の形式 1 のスナップショットも読み込めます。
save() は変更されたページを WAL にコミットし、checkpoint() は単独で利用できるスナップショットを書き出します。復旧時には、末尾の不完全なレコードを無視します。
コレクション単位の int8 コードと、ベクトル単位のスケールを使用します。自分のデータで再現率を測定し、容量と精度のバランスを選べます。
Node-API 8、TypeScript 型定義、ワーカー上で動く searchAsync を提供します。Linux x64、macOS arm64、Windows x64 向けのビルドは GitHub リリースから取得できます。
Apple M3 Max 上で Python からクエリを 1 件ずつ実行し、各数値の下にレイテンシの中央値を表示しています。完全なレポートには、インデックス構築時間、ディスク上のサイズ、測定方法、制約も記載しています。
| エンジン | SIFT1M | GloVe-100 |
|---|---|---|
| Recern VectorHNSW | 9,0410.11 ms | 6351.60 ms |
| faissHNSWFlat | 6,9610.15 ms | 3562.83 ms |
| LanceDBIVF_HNSW_SQ | 7311.34 ms | 未達 |
| LanceDBIVF_PQ, tuned | 2454.03 ms | 1675.93 ms |
| sqlite-vecexact scan | 1283.79 ms | 7140.43 ms |
データベース全体がメモリに収まる必要があります。WAL はディスクへの書き込みを減らしますが、save() は全体イメージをエンコードして比較します。チェックポイントは明示的に実行し、同時書き込みは直列化されます。古い状態の書き込み側は再度開く必要があります。
Workspace は pgvector の列とインデックス、サーバーが対応する Redis の検索インデックスとベクトルセット、コミット済みの WAL 変更を反映した Recern Vector スナップショットを検査できます。Recern Vector のコレクションでは、f32 と int8 の両方で再現率を測定できます。
ワークスペースを見る