Estou trabalhando no design de um projeto RoR para minha empresa, e nossa equipe de desenvolvimento já se debateu um pouco sobre o design, especificamente o banco de dados.
Temos um modelo chamado Message
que precisa ser persistido. É um modelo muito pequeno com apenas três colunas de db além do id, no entanto, provavelmente haverá MUITOS desses modelos quando entrarmos em produção. Estamos vendo até 1.000.000 de inserções por dia. Os modelos só serão pesquisados por duas chaves estrangeiras neles que podem ser indexadas. Além disso, os modelos nunca precisam ser excluídos, mas também não precisamos mantê-los depois de terem cerca de três meses.
Então, o que estamos nos perguntando é se a implementação dessa tabela no Postgres apresentará um problema de desempenho significativo? Alguém tem experiência com bancos de dados SQL muito grandes para nos dizer se isso será ou não um problema? E em caso afirmativo, que alternativa devemos escolher?
fonte
Respostas:
As linhas por tabela não serão um problema por si só.
Então, grosso modo, 1 milhão de linhas por dia durante 90 dias é 90 milhões de linhas. Não vejo porque o Postgres não pode lidar com isso, sem saber todos os detalhes do que você está fazendo.
Dependendo de sua distribuição de dados, você pode usar uma mistura de índices, índices filtrados e algum tipo de particionamento de tabela para acelerar o processo, uma vez que você ver quais problemas de desempenho você pode ou não ter. Seu problema será o mesmo em qualquer outro RDMS que eu conheça. Se você precisa de apenas 3 meses de design de dados em um processo de podar os dados, não precisa mais. Dessa forma, você terá um volume consistente de dados na mesa. Você tem sorte de saber quantos dados existirão, teste seu volume e veja o que consegue. Testar uma tabela com 90 milhões de linhas pode ser tão fácil quanto:
https://wiki.postgresql.org/wiki/FAQ
fonte
Outra maneira de acelerar significativamente suas consultas em uma tabela com mais de 100 milhões de linhas é agrupar a tabela no índice mais frequentemente usado em suas consultas fora do horário de expediente. Temos uma tabela com> 218 milhões de linhas e encontramos melhorias de 30X.
Além disso, para uma tabela muito grande, é uma boa ideia criar um índice em suas chaves estrangeiras.
fonte