Criei um banco de dados vetorial on-device em C (LSM-tree + HNSW)
(github.com/beginner-jhj)Sou calouro na universidade e, curioso para entender como um mecanismo de banco de dados realmente funciona, comecei a criar um por conta própria há 4 meses. No início era um armazenamento chave-valor LSM-tree para aprendizado, mas, ao adicionar uma camada vetorial e um índice HNSW, ele se tornou um banco de dados vetorial on-device.
Foi escrito inteiramente em C e não tem dependências externas. É uma biblioteca embarcada que pode ser vinculada a um app e roda diretamente no dispositivo, sem servidor; o objetivo é uso em RAG on-device e busca semântica.
Principais componentes:
- Armazenamento LSM-tree (WAL + memtable + SST + compactação)
- Índice vetorial HNSW (busca aproximada de vizinhos mais próximos)
- Kernels de distância ARM NEON SIMD (float32 / int8, L2 / dot)
- API de consulta baseada em strings (busca vetorial combinada com filtros, fácil de integrar via FFI)
Atualmente, oferece funcionalidades básicas de CRUD e consulta.
Ainda está na v1, então há otimizações e partes a completar (suporte a x86, concorrência, bindings para mobile etc.), e as limitações e o roadmap estão descritos no README.
O nome é livero (libero, “livre” em italiano + vector). Escolhi esse nome com o significado de um vector store livre de servidores e dependências, que roda livremente no dispositivo :)
Ainda não há comentários.