Preciso calcular o alcance, agrupado por diferentes critérios, e preferiria manter tudo em meu banco de dados. Estou procurando uma implementação de bitset pré-criada para PostgreSQL ou dicas sobre como posso atingir meu objetivo.
O que estou fazendo atualmente é armazenar instâncias Java serializadas de EWAHCompressedBitSet em colunas bytea, mas isso significa que tenho que ir até um processo Java para continuar meus cálculos.
Idealmente, gostaria de poder fazer o seguinte:
-- Unique people reached during a time window
SELECT service_name, last_updated_at, bitset_or(followers_bs)
FROM followers
GROUP BY service_name, last_updated_at
Eu usei uma solução comercial (Truviso) que tinha esse recurso e era baseada em PostgreSQL também.
Observe que eu tenho uma tabela que possui os dados em um formato descompactado, mas como os dados são muito grandes (10 milhões de linhas e contando), o JOIN simplesmente leva muito tempo do que desejo dedicar a ele.
Você pode usar o
"bit"
tipo em vez de"bytea"
e usar sua própria agregação definida pelo usuário ?Agora
bitset_or
deve funcionar com sua consulta conforme escrita (novamente, assumindo bytea -> bit).