Ich habe eine On-Device-Vektor-Datenbank in C gebaut (LSM-Tree + HNSW)
(github.com/beginner-jhj)Ich bin im ersten Studienjahr und wollte verstehen, wie eine Datenbank-Engine in der Praxis tatsächlich funktioniert, deshalb habe ich vor vier Monaten angefangen, selbst eine zu bauen. Anfangs war es ein LSM-Tree-Key-Value-Store zum Lernen, aber nachdem ich eine Vektor-Schicht hinzugefügt und einen HNSW-Index daraufgesetzt hatte, wurde daraus eine On-Device-Vektor-Datenbank.
Alles ist in C geschrieben und hat keine externen Abhängigkeiten. Es ist eine eingebettete Bibliothek, die ohne Server direkt in eine App gelinkt wird und auf dem Gerät selbst läuft, mit dem Ziel, On-Device-RAG oder semantische Suche zu ermöglichen.
Wichtige Bestandteile:
- LSM-Tree-Storage (WAL + Memtable + SST + Compaction)
- HNSW-Vektorindex (Approximate Nearest Neighbor Search)
- ARM-NEON-SIMD-Distanzkernel (
float32/int8, L2 / Dot) - Stringbasierte Query-API (Vektorsuche mit kombinierten Filtern, einfache FFI-Bindings)
Der aktuelle Funktionsumfang umfasst grundlegende CRUD- und Query-Funktionen.
Es ist noch v1, daher gibt es noch offene Punkte bei Optimierung und Funktionsumfang (x86-Unterstützung, Nebenläufigkeit, Mobile-Bindings usw.); Einschränkungen und Roadmap stehen in der README.
Der Name ist livero (libero, italienisch für „frei“ + vector). Der Name soll ausdrücken, dass es ein Vector Store ist, der frei von Servern und Abhängigkeiten ist und frei auf dem Gerät läuft :)
Noch keine Kommentare.