[ADR-0009] Armazenamento Vetorial Analítico (DuckDB + Parquet) | Wiki
Documentação de engenharia e especificações técnicas da Gleam-BR.
[ADR-0009] Armazenamento Vetorial Analítico (DuckDB + Parquet)
- *Status:* Proposto
- *Data:* 16 de Maio, 2026
*Contexto:*
A busca de código por similaridade exige um motor de banco de dados local veloz e sem dependências externas (daemon-less). Para o MVP, a persistência de vetores precisa ser simples. No entanto, o planejamento da Fase BETA (Rede P2P M2M) exige que os dados semânticos de um projeto possam ser sincronizados através de uma rede descentralizada (Merkle DAG / Kademlia DHT). Bancos de dados monolíticos fechados impedem a sincronização eficiente de deltas (diferenças).
*Decisão:*
Adotaremos o *DuckDB (via extensão nativa Rustler)* como motor analítico híbrido:
-
*MVP (Armazenamento Nativo):* Na Fase 1 e 2, os vetores de 384 dimensões (
FLOAT[384]) serão armazenados nativamente nas tabelas do arquivo local.duckdbusando a extensãovss(Vector Similarity Search) para cálculo de similaridade de cosseno via SQL puro. A "falsa quantização" via números aleatórios será removida da camada Rust. -
*Ponte para P2P (Exportação Parquet):* A arquitetura será desenhada de forma desacoplada. No futuro, o
gbr_graphexportará namespaces periodicamente para pequenos arquivos.parquet. O motor DuckDB consultará esses arquivos diretamente. Na Fase BETA, a rede P2P sincronizará apenas os arquivos.parquetque sofrerem mutações, resolvendo o problema do "Data Lake Descentralizado".
*Consequências:*
- *Positivas:* Resolução imediata para a busca semântica local com altíssima performance; prepara a base de dados para a sincronização fragmentada do futuro (Web3) sem precisar trocar o SGBD.
- *Negativas:* Exigirá a compilação do Rustler linkado estaticamente com as bibliotecas do DuckDB, o que aumentará o tamanho do binário final da CLI distribuída.
Melhoria v2
-
*Decisão:* A persistência vetorial usará *DuckDB + vss* localmente (
FLOAT[384]), eliminando a "falsa quantização". Devido ao aumento do tamanho do binário (linkagem estática do DuckDB e Candle ML), o motor semântico operará em uma *Arquitetura Sidecar*: será um processo completamente separado (gbr_semantic_mcp) do agente principal (gleambr_ai). Isso garante que o agente "magrinho" permaneça leve e portátil, acionando o motor semântico (quando existente) exclusivamente via o protocolo MCP. Para a futura rede P2P (BETA), os dados migrarão para exportações fragmentadas em *Apache Parquet*.