Recern Vector DB · Prototyp

Eine Vektordatenbank in einer einzigen Datei.

Recern Vector ist eine eingebettete Vektordatenbank nach dem Vorbild von SQLite. Sie läuft in deiner Anwendung, speichert alles in einer Datei und zeigt dir, wie jede Suche ausgeführt wurde. Wir entwickeln sie parallel zum Recern Workspace.

pip install recern-vectorRelease-Notes zu v0.0.1
Rust · Python · CLI · MIT OR Apache-2.0
1,30×

faiss-HNSW-Durchsatz bei Recall 0,95 auf SIFT1M

1,78×

derselbe Vergleich auf GloVe-100

35s

um eine Million Vektoren auf 14 Kernen zu indexieren

0,11ms

Median-Latenz pro Abfrage bei Recall 0,983 auf SIFT1M

Warum Recern Vector

Klein genug zum Einbetten. Offen genug zum Verstehen.

01

Eine Datei

Eine Datenbank ist eine einzige Datei, die du kopieren, sichern oder mit deiner Anwendung ausliefern kannst. Speichern ist atomar, und jede Datei wird beim Öffnen per CRC32 geprüft.

02

Kein Server

Recern Vector ist eine Bibliothek, die in deinem Prozess läuft – mit Bindings für Rust und Python und einem Kommandozeilen-Tool. Nichts zu deployen, zu konfigurieren oder am Laufen zu halten.

03

Nichts verborgen

Jede Suche kann ihre Strategie, die besuchten Knoten, die Selektivität des Filters und ihre Dauer melden. Statistiken zeigen Graph-Ebenen, Speicherverbrauch und Datensätze, die keine Suche erreicht, und den Recall misst du auf deinen eigenen Daten.

So sieht es aus

Suchen – und nachfragen, wie gesucht wurde

Dieselbe Datenbank aus Python und von der Kommandozeile. Die Ausgabe rechts stammt aus einem echten Lauf mit 20.000 Datensätzen und einem Metadaten-Filter.

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

Die Python-Bindings übernehmen NumPy-float32-Arrays, ohne einzelne Elemente umzuwandeln. Batch-Inserts bauen den Index auf allen Kernen.

Heute im Prototyp

Was schon funktioniert

  • HNSW und exakte Suche

    Ein Graph-Index mit m, ef_construction und ef_search pro Collection und ein exakter Scan, wenn du die Ground Truth brauchst.

  • Kosinus, L2 und Skalarprodukt

    Jede Collection hat eine feste Dimension und Metrik. Kosinus-Vektoren werden beim Speichern normalisiert.

  • Metadaten-Filter

    Gleichheit, $in und Bereiche im MongoDB-Stil. Trifft ein Filter nur sehr wenige Datensätze, wechselt die Abfrage zu einem exakten Scan.

  • Parallele, atomare Inserts

    Batch-Inserts bauen den Index auf allen Kernen. Ist ein Vektor ungültig, wird nichts geschrieben.

  • Upsert, Löschen und Compact

    Ersetze oder lösche Datensätze per ID und baue die Collection mit compact ohne gelöschte Datensätze neu auf.

  • Introspektions-API

    stats(), explain() und estimate_recall() sind Teil der API, kein separates Tool.

  • Python-Bindings

    Ein PyO3-Wheel für CPython 3.11 und neuer, mit Typ-Hinweisen.

  • Kommandozeilen-Tool

    init, create-collection, insert, query, inspect, recall und compact.

Benchmarks

Schneller als faiss HNSW bei gleichem Recall

Eine Abfrage nach der anderen aus Python auf Apple M3 Max, darunter jeweils die Median-Latenz. Der vollständige Bericht behandelt auch Indexaufbau, Größe auf der Festplatte, Methode und Einschränkungen.

Abfragen pro Sekunde bei Recall@10 ≥ 0,95

EngineSIFT1MGloVe-100
Recern VectorHNSW9.0410,11 ms6351,60 ms
faissHNSWFlat6.9610,15 ms3562,83 ms
LanceDBIVF_HNSW_SQ7311,34 msnicht erreicht
LanceDBIVF_PQ, tuned2454,03 ms1675,93 ms
sqlite-vecexact scan1283,79 ms7140,43 ms
Vollständigen Bericht lesen (Englisch)
Status

Wohin sich Recern Vector entwickelt

  1. Jetzt

    Prototyp

    • Phase 1 abgeschlossen: Dateiformat, HNSW, Filter, Introspektion
    • Python-Bindings und CLI
    • Öffentliche Benchmarks auf SIFT1M und GloVe-100
    • Open Source (MIT oder Apache-2.0), auf PyPI und crates.io
  2. Als Nächstes

    Erstes Release, v0.1

    • Stabiles, versioniertes Dateiformat
    • Dokumentation und Beispiele
    • Recern-Vector-Dateien im Recern Workspace öffnen
  3. Nicht für v0 geplant

    Außerhalb des Umfangs

    • Server-Modus
    • Sharding und Replikation
    • GPU-Beschleunigung
    • Ein Cloud-Dienst

Derzeit wird die ganze Datenbank im Arbeitsspeicher gehalten, beim Speichern wird die Datei neu geschrieben, und das Dateiformat kann sich noch ändern. Installation mit pip install recern-vector oder cargo add recern-vector; bis das Format stabil ist, bleiben die Versionen bei 0.0.x.

Recern Workspace

Teil eines größeren Bildes

Recern ist ein Desktop-Workspace, um Datenbanken zu verstehen. Er wird auch die Vektorsuche in Datenbanken erklären, die du bereits betreibst, etwa pgvector und Redis. Recern Vector ist ein separates Begleitprojekt und nicht Teil der Private Alpha des Workspace.

Der Private Alpha des Workspace beitreten