Para um aplicativo SAAS grande (suportado pelo PostgreSql 9.4), com mais de 300.000 contas (e em crescimento), quais são os prós e os contras de usar um esquema por conta para particionar os dados versus colocar todos os dados em um esquema e usar chaves estrangeiras para particioná-lo nas consultas?
Eu sei que no passado o pg_dump era dolorosamente lento ao trabalhar com muitos esquemas, mas não tenho certeza se esse é o caso hoje. Também estou ciente de que qualquer alteração na estrutura do banco de dados precisará ser feita em todos os esquemas. E sei que, do lado positivo, é fácil mover um esquema de um servidor físico para outro, além de restaurar um esquema do backup, sem mencionar que faz sentido particionar dados dessa maneira.
Então, quais são os prós e os contras que estou perdendo?
Respostas:
Obviamente, você está lidando com as mesmas tabelas em cada esquema de usuário. Você já considerou herança para isso? Pode oferecer o melhor dos dois mundos para alguns casos de uso. Existem também algumas limitações . Você pode ter um esquema separado para cada usuário e ainda pesquisar todas as tabelas de usuários de uma só vez, de maneira muito conveniente.
Palavras-chave:
Fora isso, é necessário mencionar pelo menos a concessão / revogação de privilégios, o que é muito mais simples com esquemas separados.
fonte