On 16-11-2012 12:09, Toty Ypiranga wrote: > Estou desenvolvendo um sistema de biotecnologia, na qual usuários > poderão se cadastrar livremente (publico) e armazenar suas sequências > de DNA e usar o sistema para uma serie de tarefas como alinhar > sequencia calcular peso molecular do DNA e etc... Como estou usando > biosql (conjunto de schemas e funções para padronização de base de > dados genômicas) com postgres emergiu a duvida sobre qual cenário > teria um melhor desempenho. > Os dois cenários tem vantagens e desvantagens. A principal pergunta é: qual a quantidade de usuários você espera?
> Cenário: 01 – uma base de dados para cada usurário; > > neste cenário o usuário se cadastra e o sistema cria uma base de dados > com o conjunto de tabelas do biosql; > Vantagens * isolamento total; * catálogo pequeno (um catálogo por BD). Desvantagens * número alto de BDs significa número alto de conexões. > > Cenário: 02 – uma base de dados única para o sistema e um schema para > cada usuário; > > neste cenário criaria uma trigger na tabela usuario e cada novo > usuario cadastrado a trigger criaria um novo schema com as tabelas e > funções do biosql colocando o nome do schema com o id do usuario. > Vantagens * compartilhamento de objetos comuns; * número baixo de conexões (se estiver utilizando pool). Desvantagens * isolamento parcial (GRANT/REVOKE para cada novo usuário ou objeto); * catálogo inchado (número alto de objetos em um mesmo BD). > Diante dos cenários expostos acima, qual teria o melhor desempenho, ou > tanto faz, pois daria na mesma. > A resposta mais sensata seria: cenário mesclado. Utilizar o cenário 2 até um número razoável (que você terá que descobrir) de usuários. O cenário 1 será utilizado para expansão (quando cenário 2 atingir o limite preestabelecido). Utilizando de teorias de sistemas, e seguindo a linha de raciocínio do Euler e da Monica, não seria muito mais apropriado criar a estrutura com um esquema, e nas tabelas fazer a distinção a que usuarios os registros pertencem? Desta forma você pode criar views com a clausula WHERE usuario=current_user e a mesma vai apresentar apenas as informações do usuario logado... Quanto ao volume de informações, acredito que se você tiver nesta estrutura, íncides bem elaborados, não vai fazer o sistema perder a eficiência. Tenho trabalhado com tabelas em um ERP com mais de um bilhão de registros e com performance superior ao esperado. Mas claro com indices bem elaborados de acordo com a necesidade. Caso a estrutura atingir o limite preestabelecido utilize-se do cenario 1 para expansão. Att. João Paulo Rieg _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
