Un seul fichier
Une base est un fichier unique que vous pouvez copier, sauvegarder ou livrer avec votre application. Les sauvegardes sont atomiques et chaque fichier est vérifié par CRC32 à l’ouverture.
Recern Vector est une base de données vectorielle embarquée, dans l’esprit de SQLite. Elle tourne dans votre application, garde tout dans un seul fichier et vous montre comment chaque recherche s’est exécutée. Nous la développons en parallèle de l’espace de travail Recern.
pip install recern-vectorNotes de version v0.0.1 le débit de faiss HNSW à un recall de 0,95 sur SIFT1M
la même comparaison sur GloVe-100
pour indexer un million de vecteurs sur 14 cœurs
latence médiane par requête à un recall de 0,983 sur SIFT1M
Une base est un fichier unique que vous pouvez copier, sauvegarder ou livrer avec votre application. Les sauvegardes sont atomiques et chaque fichier est vérifié par CRC32 à l’ouverture.
Recern Vector est une bibliothèque qui tourne dans votre processus, avec des bindings Rust et Python et un outil en ligne de commande. Rien à déployer, à configurer ni à maintenir en marche.
Chaque recherche peut indiquer sa stratégie, les nœuds visités, la sélectivité du filtre et sa durée. Les statistiques montrent les couches du graphe, la mémoire utilisée et les enregistrements qu’aucune recherche ne peut atteindre, et le recall se mesure sur vos propres données.
La même base depuis Python et depuis la ligne de commande. La sortie à droite provient d’une vraie exécution sur 20 000 enregistrements avec un filtre sur les métadonnées.
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 µsLes bindings Python acceptent des tableaux NumPy float32 sans convertir chaque élément. Les insertions par lot construisent l’index sur tous les cœurs.
Un index en graphe avec m, ef_construction et ef_search par collection, et un parcours exact quand il vous faut la vérité terrain.
Chaque collection a une dimension et une métrique fixes. Les vecteurs cosinus sont normalisés à l’enregistrement.
Égalité, $in et intervalles, dans le style de MongoDB. Quand un filtre ne retient que très peu d’enregistrements, la requête passe à un parcours exact.
Les insertions par lot construisent l’index sur tous les cœurs. Si un vecteur est invalide, rien n’est écrit.
Remplacez ou supprimez des enregistrements par id, puis compactez pour reconstruire la collection sans les enregistrements supprimés.
stats(), explain() et estimate_recall() font partie de l’API, pas d’un outil séparé.
Une wheel PyO3 pour CPython 3.11 et plus, avec annotations de type.
init, create-collection, insert, query, inspect, recall et compact.
Une requête à la fois depuis Python sur Apple M3 Max, avec la latence médiane sous chaque valeur. Le rapport complet couvre aussi la construction de l’index, la taille sur disque, la méthode et les limites.
| Moteur | 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 | non atteint |
| LanceDBIVF_PQ, tuned | 2454,03 ms | 1675,93 ms |
| sqlite-vecexact scan | 1283,79 ms | 7140,43 ms |
Pour l’instant, toute la base est chargée en mémoire, chaque sauvegarde réécrit le fichier et le format peut encore évoluer. Installation avec pip install recern-vector ou cargo add recern-vector ; les versions restent en 0.0.x tant que le format n’est pas stable.
Recern est un espace de travail de bureau pour comprendre les bases de données. Il expliquera aussi la recherche vectorielle dans les bases que vous utilisez déjà, comme pgvector et Redis. Recern Vector est un projet compagnon distinct, qui ne fait pas partie de l’alpha privée de l’espace de travail.
Rejoindre l’alpha privée de l’espace de travail