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

Responder a