J’ai créé en C une base de données vectorielle on-device (LSM-tree + HNSW)
(github.com/beginner-jhj)Je suis en première année d’université et, curieux de comprendre comment fonctionne réellement un moteur de base de données, j’ai commencé à en créer un moi-même il y a 4 mois. Au départ, c’était un magasin clé-valeur LSM-tree à but pédagogique, puis en y ajoutant une couche vectorielle et un index HNSW, c’est devenu une base de données vectorielle on-device.
Tout est écrit en C, sans dépendance externe. C’est une bibliothèque embarquée que l’on lie directement à une application, sans serveur, et qui s’exécute sur l’appareil ; elle vise les usages de RAG on-device et de recherche sémantique.
Principaux composants :
- Stockage LSM-tree (WAL + memtable + SST + compaction)
- Index vectoriel HNSW (recherche approximative des plus proches voisins)
- Kernels de distance ARM NEON SIMD (float32 / int8, L2 / dot)
- API de requête basée sur des chaînes (recherche vectorielle combinée à des filtres, facile à lier via FFI)
Les fonctionnalités actuelles couvrent le CRUD de base et les requêtes.
Comme il s’agit encore d’une v1, il reste des optimisations et des éléments à compléter (prise en charge de x86, concurrence, bindings mobiles, etc.) ; les limites et la feuille de route sont décrites dans le README.
Le nom est livero (libero, « libre » en italien + vector). Je l’ai choisi avec l’idée d’un vector store libre des serveurs et des dépendances, qui tourne librement sur l’appareil :)
Aucun commentaire pour le moment.