Estou trabalhando com um banco de dados PostgreSQL onde preciso armazenar um valor numérico associado a uma chave específica.
Com o tempo, adicionarei continuamente esse valor com base na chave.
Quero garantir que a tabela não fique inchada com várias versões de linhas ou tuplas inativas, especialmente porque essa operação de atualização será frequente (como 100 req/s).
Quais são as melhores práticas no PostgreSQL para fazer isso?
Devo usar INSERT ON CONFLICT, um gatilho ou outra abordagem?
Como posso garantir que minha tabela permaneça eficiente e não sofra com inchaço excessivo devido a atualizações frequentes?
Você precisa ter certeza de que essas atualizações se tornem HOT updates . Isso permite que o PostgreSQL remova as tuplas mortas (que não podem ser evitadas) para serem removidas de forma muito mais eficiente, para que você não acabe com inchaço de tabela.
Para isso
defina o
fillfactor
valor dessa tabela para menos de 100 quando você criá-lacertifique-se de que a coluna numérica não esteja indexada
O quão baixo você precisa definir
fillfactor
depende do tamanho das linhas da tabela e do número de linhas que você modifica em uma única instrução. Para linhas pequenas e atualizações de linha única, 90 é bom o suficiente.