Número máximo de bancos de dados para uma única instância do PostgreSQL 9

9

Ao desenvolver um aplicativo para vários clientes, planejamos usar um banco de dados diferente para cada cliente. Mas pode haver mais de 1000 clientes (aplicativos).

O PostgreSQL lidará com isso sem problemas?

Alguém já tentou algo semelhante?

Nota: 35 tabelas para cada uma, com até 3000 registros em média, para cada banco de dados.

Juanin
fonte

Respostas:

5

Eu não tentei eu mesmo, mas há outros por aí que o fizeram. Aqui você pode ver que até 10.000 bancos de dados são executados sem problemas em uma única instância. Você também pode encontrar alguns aspectos práticos no ServerFault .

Como seus bancos de dados são muito pequenos, você não encontrará nenhum tipo de limitação de número de arquivo do sistema operacional host. O único problema que consigo pensar é que, quando todos esses bancos de dados forem acessados ​​simultaneamente, o manuseio de todas essas conexões será complicado.

E, como última observação: você é muito bem-vindo neste site. Esperamos que você permaneça conosco por um longo tempo.

dezso
fonte
Obrigado por seus comentários. Sim, as conexões simultâneas podem ser uma dor de cabeça, mas a outra opção é uma tabela compartilhada para cada aplicativo, incrivelmente mais complexa (precisa ser reprogramada para o aplicativo).
Juanin 10/09/12
2

Parece uma coisa bagunçada de se fazer do ponto de vista gerencial. Como você planeja fazer backup de tantos bancos de dados? com um script que circula por cada um?

A menos que você tenha um motivo realmente bom, por que não apenas um banco de dados em que a estrutura foi projetada para que todos os dados sejam vinculados a um ID do cliente. Adicione índices / chave estrangeira / chaves primárias com base nesse campo para garantir a integridade dos dados.

Então você só precisa ter uma cláusula where em todas as suas consultas para acessar apenas um ID do cliente. Isso será muito mais simples de manter e é fácil de desenvolver (porque em ambos os casos você precisa permitir a identificação do cliente)

adam f
fonte
11
Este é um ponto muito bom e válido. Talvez o OP deva pensar em usar esquemas e ter apenas algumas tabelas no esquema público, disponíveis para JOIN com tabelas no esquema do cliente privado.
François Beausoleil
Obrigado, mas esta opção foi descartada desde o início. Esta é uma porta de uma aplicação já desenvolvida, e alterar TODO o código não é tão trivial neste estágio. Mas sim, o gerenciamento diário de mais de 100 bancos de dados será ... interessante ... não é?
Juanin 10/09/12
11
Indo de bancos de dados separados para esquemas separados não deve implicar nenhuma alteração significativa no código. Em particular, você não precisa prefixar os objetos com seus esquemas, porque search_pathfaz isso por você.
Daniel Vérité
O arquivamento do Wal para um backup faria sentido aqui.
Jharwood # 24/12
0

Há pessoas que fazem isso, principalmente para hospedagem compartilhada de servidores.

Pensando nas questões aqui, não há almoço grátis. Você provavelmente poderia fazer isso com esquemas de uma maneira transparente do aplicativo. No entanto, você obtém milhares de esquemas e dezenas de milhares de tabelas, o que apresentará problemas adicionais.

Eu acho que, no geral, a abordagem de vários bancos de dados é a mais correta, considerando seus comentários.

O gerenciamento (como backups) se tornará interessante. Também eu acho que em algum momento as conexões com o db começarão a demorar mais tempo. Se você estiver usando o pg_hba.conf para restringir o acesso (o que você deve fazer), isso também se tornará uma dor de cabeça e você provavelmente desejará criar uma solução para gerar esse arquivo para você ...

Chris Travers
fonte
Não consigo ver o problema com o pg_hba.conf. Nosso aplicativo usa Ruby on Rails e alterna conexões para diferentes bancos de dados, mas na mesma caixa Linux o tempo todo. está falando de problemas de simultaneidade ao acessar o arquivo?
Juanin 25/09/12
11
Não, apenas se você deseja gerenciar quais dbs podem ser acessados ​​por quais hosts, ele se tornará um arquivo longo e o gerenciamento poderá se tornar um pouco irritante.
precisa saber é o seguinte
0

Espero que seja melhor ler este link: 10.000 bancos de dados em um cluster PostgreSQL por Jon Jensen, 2008.

Um trecho:

A resposta curta: o Postgres 8.1 lida com 10.000 bancos de dados. \l O psql gera uma longa lista de bancos de dados, é claro, mas retorna com rapidez suficiente. O teste de concorrência ad-hoc foi bom. A execução de consultas, inserções etc. em um grupo escolhido a dedo dos vários bancos de dados de reprodução funcionou bem, inclusive enquanto novos bancos de dados estavam sendo criados.

[...]

O limite real nessa plataforma [ Linux ext3 ] é provavelmente 31995 bancos de dados, porque cada banco de dados ocupa um subdiretório em data / base / e o sistema de arquivos ext3 possui um limite de 31998 subdiretórios por um diretório, decorrente do seu limite de 32000 links por inode.

user117336
fonte
11
As respostas que contêm apenas links não são muito úteis, porque os links tendem a ficar obsoletos ao longo do tempo. Considere adicionar o resumo do que você está vinculando na sua resposta.
mustaccio