Construí um Banco de Dados Vetorial em Rust com Tiered Storage (Hot/Warm/Cold)
Olá, pessoal!
Gostaria de partilhar os detalhes técnicos de um projeto que tenho desenvolvido: o FerresDB Core. É um motor de busca vetorial de alta performance escrito em Rust, focado em resolver um dos maiores problemas de infraestrutura em IA: o custo proibitivo de manter grandes bases de vetores (embeddings) inteiramente em memória RAM.
O Problema da Memória em Busca Vetorial
A maioria das soluções atuais de busca semântica e RAG (Retrieval-Augmented Generation) assume que o índice deve estar 100% na RAM para ser rápido. No entanto, quando falamos de milhões de vetores de alta dimensão, o custo de cloud escala de forma insustentável.
A Solução: Arquitetura de Tiered Storage
Para resolver isso, implementei um sistema de armazenamento em camadas que permite equilibrar latência e custo:
-
Hot Tier (RAM): Onde residem os pontos mais acedidos. Utiliza o algoritmo HNSW para garantir buscas em sub-milissegundos.
-
Warm Tier (mmap): Pontos intermédios são mapeados via mmap. Isto permite que o sistema operativo faça o swap inteligente de memória, mantendo a performance alta sem ocupar a memória heap da aplicação.
-
Cold Tier (Disco): Persistência em JSON-lines para dados de arquivo ou raramente acedidos. O motor resolve estes pontos apenas quando necessário, garantindo que a base de dados possa crescer além da capacidade da RAM física.
Destaques da Engenharia
-
Performance com Rust & SIMD: O motor utiliza aceleração de hardware (AVX2 ou SSE4.1) para cálculos de distância vetorial, com fallback escalar automático.
-
Resiliência (WAL & Recovery): Implementei um Write-Ahead Log (WAL). Cada operação de escrita é registada antes de ser aplicada, e o sistema faz snapshots periódicos a cada 1000 operações para garantir uma recuperação rápida após falhas (crash recovery).
-
Busca Híbrida e Re-ranking: O motor não faz apenas busca vetorial. Ele integra BM25 e estratégias de fusão como RRF (Reciprocal Rank Fusion) para combinar busca semântica com palavras-chave.
-
Protocolo MCP: O FerresDB atua como um servidor Model Context Protocol (MCP) via STDIO. Isto significa que pode ser ligado diretamente ao Claude Desktop ou outros agentes de IA.
Stack Técnica
-
Linguagem: Rust (pela segurança de memória e controlo de baixo nível).
-
Concorrência: Paralelização massiva com Rayon para ingestão de batches.
-
API: Servidor REST construído com Axum e suporte a distributed tracing com OpenTelemetry.
Próximos Passos: Open Source
O projeto está atualmente em fase final de refinamento técnico e limpeza da documentação. Quero garantir que a primeira versão pública seja sólida e fácil de usar.
Logo logo o FerresDB será oficialmente open-source (licença MIT).
Estou a preparar o repositório para que a comunidade possa não só usar, mas também contribuir para a evolução do sistema de compactação do WAL e novos backends de busca.
Mas já é possível testar!
O que acham desta abordagem de camadas? Alguém aqui já teve de lidar com faturas de cloud astronómicas devido ao uso de RAM em bases vetoriais?
Fonte: https://www.ferres.io