Recern Vector DB · 0.2.0

Een vectordatabase in één bestand.

Recern Vector 0.2.0 is een embedded vectordatabase voor Rust, Python, Node.js en de CLI. Een lokale snapshot en WAL, HNSW-zoekopdrachten, int8-opslag en query’s die uitleggen hoe ze zijn uitgevoerd.

pip install recern-vectorReleasenotities, v0.2.0 (Engels)
Rust · Python · Node.js · CLI · MIT OR Apache-2.0

Recern Workspace · demodatabase

Recern Workspace met gemeten recall- en latentiecurves voor de int8-democollectie payment_patterns.

Meet recall en latentie bij verschillende ef-waarden voor de int8-collectie payment_patterns.

Recern Workspace · demodatabase · Recall

Meet recall en latentie bij verschillende ef-waarden voor de int8-collectie payment_patterns.

Gepubliceerde referentiemetingen van 2026-10-07, van vóór 0.2.0; deze cijfers meten niet int8 of de nieuwe filterplanner.

1,30×

de doorvoer van faiss HNSW bij een recall van 0,95 op SIFT1M

1,78×

dezelfde vergelijking op GloVe-100

35s

om één miljoen vectoren op 14 cores te indexeren

0,11ms

mediane querylatentie bij een recall van 0,983 op SIFT1M

Waarom Recern Vector

Klein genoeg om in te bouwen. Open genoeg om te begrijpen.

01

Een draagbare snapshot

Wijzigingen worden vastgelegd in een WAL met checksums. Roep checkpoint() aan voordat je alleen de .rvec-snapshot kopieert en pauzeer daarbij de schrijfbewerkingen; bewaar anders de bijbehorende snapshot en WAL samen.

02

Geen server

Draait in je applicatie met Rust, Python, native Node.js-bindings of de CLI. Node.js-binaries voor ondersteunde platforms zijn bij de release gevoegd; het pakket staat nog niet op npm.

03

Niets verborgen

Elke zoekopdracht kan rapporteren welke strategie is gebruikt, welke knooppunten zijn bezocht, hoe selectief het filter was en hoelang het duurde. Statistieken tonen de graaflagen, het geheugengebruik en records die een zoekopdracht niet kan bereiken. Je kunt de recall meten op je eigen data.

Zo werkt het

Zoek en bekijk hoe de zoekopdracht is uitgevoerd

Dezelfde database vanuit Python en de opdrachtregel. De uitvoer rechts komt uit een echte zoekopdracht op 20.000 records met een metadatafilter.

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

De Python-bindings accepteren NumPy-arrays van het type float32 zonder elk element te converteren. Batchinvoegingen bouwen de index op alle cores.

In 0.2.0

Wat al werkt

  • HNSW en exact zoeken

    Een graafindex met m, ef_construction en ef_search per collectie, en een exacte scan wanneer je een betrouwbare referentie nodig hebt.

  • Cosinus, L2 en inwendig product

    Elke collectie heeft een vaste dimensie en metriek. Vectoren voor de cosinusmetriek worden bij het opslaan genormaliseerd.

  • Metadatafilters

    Gelijkheid, $in, bereiken en geneste $and, $or en $not. Een kostenplanner schat de filterselectiviteit met steekproeven, kiest tussen exact zoeken en HNSW en past de zoekinspanning aan.

  • Parallelle, atomaire invoegingen

    Batchinvoegingen bouwen de index op alle cores. Als één vector ongeldig is, wordt er niets geschreven.

  • Upsert, verwijderen en compact maken

    Vervang of verwijder records op id en maak de collectie daarna compact om haar opnieuw op te bouwen zonder verwijderde records.

  • Introspectie-API

    stats(), explain() en estimate_recall() zijn onderdeel van de API, geen aparte tool.

  • Python-bindings

    Een PyO3-wheel voor CPython 3.11 en nieuwer, met type hints.

  • Opdrachtregeltool

    init, create-collection, insert, query, inspect, recall, checkpoint en compact.

  • Stabiel formaat 2

    Bestanden met versienummers, checksums en compatibiliteitstests met referentiebestanden. Bestaande snapshots in formaat 1 blijven leesbaar.

  • WAL en checkpoint

    save() legt gewijzigde pagina’s vast in de WAL; checkpoint() schrijft een zelfstandige snapshot. Onvolledige records aan het einde worden bij het herstel genegeerd.

  • Optioneel int8

    int8-codes per collectie met schaalfactoren per vector. Meet de recall op je eigen data om de afweging tussen opslag en nauwkeurigheid te bepalen.

  • Native Node.js-bindings

    Node-API 8, TypeScript-definities en searchAsync op een worker. Builds voor Linux x64, macOS arm64 en Windows x64 staan in de GitHub-release.

Benchmarks

Sneller dan faiss HNSW bij gelijke recall

Eén query tegelijk vanuit Python op Apple M3 Max, met de mediane latentie onder elk cijfer. Het volledige rapport behandelt ook de indexbouwtijd, schijfgrootte, methode en beperkingen.

Query’s per seconde bij recall@10 ≥ 0,95

EngineSIFT1MGloVe-100
Recern VectorHNSW9.0410,11 ms6351,60 ms
faissHNSWFlat6.9610,15 ms3562,83 ms
LanceDBIVF_HNSW_SQ7311,34 msniet bereikt
LanceDBIVF_PQ, tuned2454,03 ms1675,93 ms
sqlite-vecexact scan1283,79 ms7140,43 ms
Lees het volledige rapport (Engels)
Status

Recern Vector 0.2.0 en wat volgt

  1. Beschikbaar

    0.2.0

    • Stabiel formaat met compatibiliteitstests
    • WAL en incrementele schrijfbewerkingen
    • Optionele int8-opslag voor vectoren
    • Metadatafilters met AND / OR / NOT
  2. Volgende stappen

    Verdere verbeteringen

    • De kosten van het volledig coderen bij opslaan verlagen
    • Automatische checkpoints
    • Platformpakketten en een loader voor npm
  3. Niet gepland voor v0

    Buiten de scope

    • Servermodus
    • Sharding en replicatie
    • GPU-versnelling
    • Een clouddienst

De database moet nog steeds in het geheugen passen. WAL vermindert het aantal schrijfbewerkingen naar schijf, maar save() codeert en vergelijkt de volledige database. Checkpoints worden expliciet uitgevoerd; gelijktijdige schrijvers worden na elkaar afgehandeld en schrijvers met een verouderde weergave moeten de database opnieuw openen.

Recern Workspace

Onderdeel van een groter geheel

Workspace laat pgvector-kolommen en -indexen zien, Redis-zoekindexen en vectorsets als de server die ondersteunt, en Recern Vector-snapshots met vastgelegde WAL-wijzigingen. Recallmetingen zijn beschikbaar voor Recern Vector-collecties, zowel f32 als int8.

Ontdek de workspace