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.
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) Recern Workspace · demodatabase

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.
de doorvoer van faiss HNSW bij een recall van 0,95 op SIFT1M
dezelfde vergelijking op GloVe-100
om één miljoen vectoren op 14 cores te indexeren
mediane querylatentie bij een recall van 0,983 op SIFT1M
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.
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.
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.
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 µsDe Python-bindings accepteren NumPy-arrays van het type float32 zonder elk element te converteren. Batchinvoegingen bouwen de index op alle cores.
Een graafindex met m, ef_construction en ef_search per collectie, en een exacte scan wanneer je een betrouwbare referentie nodig hebt.
Elke collectie heeft een vaste dimensie en metriek. Vectoren voor de cosinusmetriek worden bij het opslaan genormaliseerd.
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.
Batchinvoegingen bouwen de index op alle cores. Als één vector ongeldig is, wordt er niets geschreven.
Vervang of verwijder records op id en maak de collectie daarna compact om haar opnieuw op te bouwen zonder verwijderde records.
stats(), explain() en estimate_recall() zijn onderdeel van de API, geen aparte tool.
Een PyO3-wheel voor CPython 3.11 en nieuwer, met type hints.
init, create-collection, insert, query, inspect, recall, checkpoint en compact.
Bestanden met versienummers, checksums en compatibiliteitstests met referentiebestanden. Bestaande snapshots in formaat 1 blijven leesbaar.
save() legt gewijzigde pagina’s vast in de WAL; checkpoint() schrijft een zelfstandige snapshot. Onvolledige records aan het einde worden bij het herstel genegeerd.
int8-codes per collectie met schaalfactoren per vector. Meet de recall op je eigen data om de afweging tussen opslag en nauwkeurigheid te bepalen.
Node-API 8, TypeScript-definities en searchAsync op een worker. Builds voor Linux x64, macOS arm64 en Windows x64 staan in de GitHub-release.
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.
| Engine | 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 | niet bereikt |
| LanceDBIVF_PQ, tuned | 2454,03 ms | 1675,93 ms |
| sqlite-vecexact scan | 1283,79 ms | 7140,43 ms |
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.
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