>> Boa noite a todos,
>>
>> Estou chegando agora na discussão, mas posso falar sobre o tema, afinal
>> criamos um ERP desta maneira, quem quiser pode conferir nos links abaixo.
>>
>> O que posso dizer é que no nosso caso foi a escolha mais certa que já
>> fizemos, você precisa ter muito cuidado com a documentação,
>> principalmente se o número de desenvolvedores for grande.
>>
>> Fizemos uso de PL/pgSQL direto, e hoje após quase 5 anos do cliente
>> piloto posso te dizer ficou acima do esperado.
>>
>> Até hoje não tive problema de performance, o desenvolvimento é
>> extremamente rápido, sem falar na questão da segurança e confiança nas
>> transações!
>>
>> Na época lembro que muita gente falava que era loucura fazer desse
>> jeito, e pelo que vi tem vários colegas da lista que pensam assim, o que
>> posso dizer é que gostaria de ter enlouquecido bem antes, na época que
>> segui o tal modelo 3 camadas e queria que minha aplicação fosse multi
>> banco!
>>
>> Bom é só a minha humilde opinião, se precisar de alguma dica fique a
>> vontade para perguntar, apesar do foco do seu sistema ser diferente acho
>> que é a mesma idéia!
>
> Eu concordo. Mas tudo é uma questão de escala.
> Utilizar funções para calcular em lote a folha de pagamento de 10 mil
> funcionários é uma benção. Utilizar funções para todo e qualquer
> processamento num ERP com centenas de transações ATIVAS, pode ser uma dor de
> cabeça.
> Veja que isso já foi pior em versões anteriores do Postgres, hoje já é
> possível ajustar melhor a performance de funções e rastrear as estatísticas
> destas, mas ainda dá mais trabalho. Queria saber a opinião de quem usa
> pl/proxy em relação a isso, uma vez que você tem de encapsular tudo em
> funções...
> +2 cents.

Meus dois centavos nesta discussão vão na direção contrária.
Suporto um sistema *lotado* de pl/pgsql com praticamente todas as
regras de negócio dentro do banco de dados.
- A idéia é ótima no seguinte sentido: tudo o que está fora do banco é
só apresentação.
- A idéia é péssima no sentido contrário: a aplicação tem centenas de
milhares de usuários e funciona em escala nacional. Como toda a regra
de negócio está no banco, o consumo de CPU é altíssimo, batendo em
100% em máquinas bastante parrudas. Quando é necessário aumentar a
escala de atendimento, é necessário colocar máquina mais poderosa.
Isso depois de muito tuning e uso de PostgreSQL 9 onde a parte de BI e
relatórios com consultas mais complicadas são feitas em servidor
hot-standby.

Para escalar horizontalmente esse ambiente, só há uma forma: modificar
toda a estrutura do banco quando estiver disponível totalmente a
implementação de SQL-MED, pra poder fazer com mais facilidade o uso de
dados remotos e separar fisicamente tabelas por regiões ou estados.

Se a regra de negócio estivesse na camada de aplicação, seria possível
dividir dados usando alguma técnica de sharding com mais facilidade e
menos alterações em código.

Minha dica para novos sistemas é sempre assim:
- regra de negócio sempre numa camada fora do banco de dados;
- llinguagens procedurais devem e podem ser utilizadas, mas de forma
restrita para as funcionalidades de banco de dados (ex.:
particionamento, regras para suprir restrições, validação de dados não
possíveis por restrições, etc);
- camada de apresentação separada da camada de aplicação.

Assim suprem-se as técnicas MVC modernas e ganha-se em portabilidade
(fica mais fácil migrar de SGBD ou misturar SGBDs) e escalabilidade
(usar linguagem procedural para movimentar dados de forma independente
da aplicação).

[]s
Flavio Gurgel
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a