Hice una base de datos vectorial on-device en C (LSM-tree + HNSW)
(github.com/beginner-jhj)Soy estudiante de primer año de universidad y, como tenía curiosidad por cómo funciona realmente un motor de base de datos, empecé a crear uno por mi cuenta hace 4 meses. Al principio era un almacén clave-valor con LSM-tree para aprender, pero al añadirle una capa vectorial y montar un índice HNSW, se convirtió en una base de datos vectorial on-device.
Está escrita completamente en C y no tiene dependencias externas. Es una biblioteca embebida que se enlaza directamente a la app y corre dentro del dispositivo sin servidor, así que está pensada para RAG on-device o búsqueda semántica.
Componentes principales:
- almacenamiento LSM-tree (WAL + memtable + SST + compactación)
- índice vectorial HNSW (búsqueda aproximada de vecinos más cercanos)
- kernel de distancia ARM NEON SIMD (
float32/int8, L2 / dot) - API de consultas basada en cadenas (búsqueda vectorial combinada con filtros, fácil de usar con bindings FFI)
Actualmente tiene funciones básicas de CRUD y consultas.
Todavía es una v1, así que quedan partes por optimizar o completar (soporte para x86, concurrencia, bindings móviles, etc.), y las limitaciones y la hoja de ruta están descritas en el README.
El nombre es livero (libero, que en italiano significa "libre" + vector). Lo nombré así con la idea de una vector store libre de servidores y dependencias, que corre libremente sobre el dispositivo :)
Aún no hay comentarios.