SetrixDB: motor de conjuntos em Go — interseção exata sobre IDs (e onde ele perde)
“Dado um ID, ele está nesta lista?” e “quais IDs aparecem nas duas listas ao mesmo tempo?” Parecem exercícios de livro-texto. Mas quando essas listas têm milhões ou bilhões de elementos e precisam responder em microssegundos — num filtro facetado, numa checagem de permissão, num pré-filtro de candidatos para um LLM — a resposta deixa de ser trivial. Este artigo é sobre uma primitiva específica:…
SetrixDB é uma biblioteca em Go que lida com a operação de interseção exata sobre IDs uint64. O problema é que muitos softwares modernos cruzam listas de identificadores para execuções como filtro facetado, permissões de usuário ou integração com LLMs. A escolha central é trabalhar sempre com IDs uint64, o que permite uma representação e interseção aritmética direta.
O projeto surgiu do erro de um hash posicional que resultava em 78% de colisões. Para corrigir isso, foi implementado um Minimal Perfect Hash Function (MPHF) chamado CHD v2, que garante 0 colisões para 50 milhões de chaves e usa apenas 24 MiB de memória. SetrixDB oferece memória 2,2 vezes menor e tem tempo de lookup de ~118 ns, em comparação com map[uint64] que ocupa 22,3 bytes por chave e tem tempo de lookup de 133,3 milhões de operações por segundo.
A biblioteca utiliza bitsets em várias representações para otimizar a interseção, incluindo um bitset denso para universos densos e híbrido para universos esparsos. No entanto, SetrixDB não suporta range queries, similidades, joins ou atualizações frequentes, pois é projetado apenas para interseção exata de conjuntos de IDs.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.