Executando verificação de segurança...
2

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:

  1. Hot Tier (RAM): Onde residem os pontos mais acedidos. Utiliza o algoritmo HNSW para garantir buscas em sub-milissegundos.

  2. 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.

  3. 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?

FerresDB

Carregando publicação patrocinada...