Em continuação a uma pergunta postada por mim em É uma boa ideia mover tabelas de alto volume e altamente acessadas para um banco de dados separado? , estou procurando diferentes técnicas/soluções disponíveis para arquivamento de banco de dados no PostgreSQL.
Poucas soluções que posso pensar são:
- Particionamento de tabela
- Espaço de tabela e/ou esquema separado
- Movendo registros/tabelas arquivados para um disco rígido diferente
Quaisquer outras sugestões/dicas/soluções são muito bem-vindas e apreciadas.
NOTA: Estamos executando o PostgreSQL v9.1.3 no CentOS5.2
Minha sugestão sobre arquivamento:
archive_tablespace
(se você quiser, pode separar o hardware no arquivo)Crie tabelas. Por exemplo, queremos arquivar postagens de tabela.
Depois disso teremos 2 novas tabelas: public.posts_all (com as mesmas colunas dos posts) para consultar todos os posts (arquivo e produção) e public.posts_archive para consultar todos os posts do arquivo. Public.posts herdará de posts_all.
As inserções devem ser feitas da maneira antiga (para a tabela public.posts), a menos que você escreva gatilhos em posts_all para redirecionar as inserções para a tabela de postagens. Se você tiver particionamento, será mais complicado. Com o aplicativo funcionando e antes da migração de dados antigos, você não precisa alterar nada no código do aplicativo para trabalhar com essa abordagem.
Crie um arquivo de esquema para separação lógica. Minha sugestão será separar os dados do arquivo por algum período de tempo (ano ou mês), se possível (archive_2005).
Crie tabelas de arquivo no esquema archive_year
Depois disso, você terá novas postagens de tabela no esquema archive_2005 e o planejador postgresql saberá que os dados existem apenas no período de tempo projetado. Se você consultar por outro período de tempo, o postgresql não pesquisará nesta tabela.
Crie funções/procedimentos/gatilhos para mover dados para arquivar tabelas.
Se implementado:
archive_tablespace
ou apenas alterá-la para herdar de posts_archive (não testei isso)Esta é uma técnica geral e você deve adaptá-la às suas necessidades. Alguma sugestão para melhorar isso?
Leitura adicional: Herança do PostgreSQL , particionamento