Esta thread está ficando agradavelmente construtiva!

>> Meus dois centavos nesta discussão vão na direção contrária.
>
> Vou discordar, correndo o risco de parecer ridículo — afinal, tu representas
> *o* caso de PostgreSQL do milênio…

E olha que, neste caso, nem estou falando d*o* case do milênio :) Nele
o banco de dados é praticamente um "saco de dados".

> Claro que não tenho como questionar, não tenho informações suficientes nem, no
> momento, quero ter… mas essa é uma questão interessante.  Regras de negócio
> causando uso total de processadores no servidor de bases de dados, na minha
> experiência e na lógica que chego a alcançar, costuma indicar problemas de
> codificação, principalmente por uso de modelos de programação descasados com o
> modelo relacional, como o navigacional e o POG: respectivamente, tipicamente
> representados pelos clipeiros e pelo Hibernate, claro que nem de longe
> exclusiva, embora talvez majoritariamente.

Esse sistema que estou falando foi feito em C, tudo CGI, não tem ORM e
praticamente funciona assim:
Aplicação em C: oi usuário, o que você quer fazer agora?
Usuário: quero cadastrar uma pessoa.
Aplicação em C: taqui o formulário pra você preencher. É só clicar o
botão Ok no final, tá?
Usuário preenche os dados e clica no Ok.
Aplicação: ok usuário! vou mandar seus dados pro SGBD.
Aplicação: SGBD, por favor, aqui estão os dados do cadastro: "SELECT
cadastra_formulario(dados, dados, dados, dados,.... muitos
dados,...);"

E o SGBD: Cata os dados, valida input, trata strings, verifica
consistência em todas as tabelas relacionadas, insere cada pedaço do
formulário em 10 tabelas diferentes, atualiza a tabela de histórico,
computa sequências, atualiza índices, checa as restrições locais e
estrangeiras e "comita tudo.
SGBD: Aplicação, "COMMIT".
Aplicação: Obrigado SGBD. Usuário, Ok!
Usuário esquece a tela aberta, ainda por cima.

Agora imagina que:
- o modelo de dados é bem elaborado, acadêmico _mesmo_;
- usa-se pl/pgsql puro, sem outros wrappers para outras linguagens;
- os índices são extremamente enxutos e _todos_ foram verificados
junto às consultas.

Aí a aplicação, tadinha, ela sofre tanto... deram três servidores
parrudos só pra ela.
O SGBD, ah, esse desgraçado! Tá comendo uma máquina inteira sozinho, humpf!

Agora no duro: se a parte toda de validação de input e tratamento de
strings fosse na aplicação, a aplicação abrisse uma transação com o
banco e resolvesse sua vida, o processamento de cada passo no pl/pgsql
poderia muito bem ser dela, distribuindo bem melhor a carga entre seus
três servidores.

>        Claro que, muitas vezes, o pobre do DBA, que deveria receber adicional
> de insalubridade por ser, na prática, gari de curva de rio, não tem como
> garantir nem o modelo, nem a qualidade da programação.  Mas creio que vale a

Olha, neste caso eu tive acesso a tudo. Cada tabela, índice e
procedure. Tudo muito bem escrito, juro, acadêmico.

> pena mencionar para que não fique parecendo que a ‘culpa’ é da garantia das
> regras de negócio no SGBD.  Isso deveria ser um requisito conceitual absoluto,
> embora nem sempre o SQL facilite e quase nunca a organização tenha competência
> (ou as famosas ‘condições objetivas’) para alcançar.

Vamos então nomear melhor os bois: a regra tem que estar no SGBD sim,
ok. Restrições, regras e etc. Mas o processamento das informações
_antes_ de chegar no SGBD, isso não deveria estar com ele. E, neste
caso, está.

>> Quando é necessário aumentar a escala de atendimento, é necessário colocar
>> máquina mais poderosa.
>
> Hm, quando armazenamento de massa em memória /flash/ se tornar mais lugar
> comum, conquistar nossa confiança, for bem aproveitada por nossos sistemas de
> arquivos… quem sabe consigamos implementar os conceitos do saudoso (em parte)
> /mainframe/, como as hierarquias de memórias e armazenamento.

Note que o gargalo nesta aplicação que estou citando *não* é disco. O
throughput nem é tão alto assim, a quantidade de WAL que é gerada lá é
menos da metade do que o tal "case do milênio", tá tudo monitorado e o
storage tá... coçando.

Consegui bom ganho limitando bem o uso de conexões ao PostgreSQL com
um pool usando o pgbouncer muito bem configurado.

>> 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.
>
> Sim, com a tecnologia atual, sim.  Pelo pouco que entendo do SQL‐MED, nem ele
> chega a implementar de verdade um SGBDDistribuídas.  Idealmente, poderíamos
> programar, digamos, em SQL/PSM ou PL/Scheme ou o que bem entendêssemos, e
> deslocar o código transparentemente entre servidores.  Mesmo assim, a minha
> expectativa seria de que, freqüentemente, descobriríamos que as regras de
> negócio teriam melhor desempenho junto da base, por evitarem latências
> decorrentes de mudanças de contexto, transferências de dados pela rede &c.

O agora Microsoft Skype tem um excelente caso de sucesso justamente
separando tudo: chamada remota de função com o plproxy é um sucesso.
E, juro, mandei estudo disso para o cliente. Era só modificar 70
funções em pl/pgsql e a aplicação toda, mas ia ficar "da hora". O
custo foi proibitivo e ameaçaram trocar pelo RAC se fossem gastar a
grana toda :P

> Pois é, mas se considerarmos que todas as regras de negócios devem ser
> implementadas como restrições, de preferência declarativas, fica contraditório
> ter isso fora da base, não?  Ou minha lógica falhou nalgum ponto que não
> alcancei?

Como falei acima, tô contigo na questão regra de negócio. O problema é
o processamento do negócio. IMHO, deve estar fora do SGBD.

>        Sim, claro, o SQL não é relacional, isso impõe restrições e tudo o
> mais… mas o PostgreSQL, particularmente, é suficientemente próximo do ISO
> SQL:2008, e até do modelo relacional, para o desenvolvimento de um novo

PostgreSQL é a melhor implementação da ISO, reconhecido e utilizado
academicamente por isso.
E olha que a comunidade não tem dinheiro pra ficar comprando norma.
Aliás, norma, do jeito como é no nosso mundo, na minha opinião, é só
um jeito de ganhar dinheiro com patent war.

> sistema aplicativo por uma equipe competente com requisitos claros, completos
> e estáveis ser viável sem grandes gambiarras… claro, se existissem equipes
> competentes com requisitos claros, completos e estáveis no mundo real.

Existem sim. Os integrantes dessas equipes se chamam nerds. E eles
estão em alta no mercado de trabalho e até na vida afetiva.
Claro que tem que ter um balanço: nerdice versus praticidade.
Não acho que o mundo deva ser 100% nerd pra fazer as coisas em TI.
Ninguém ganharia dinheiro. Eu proponho um balanço: bem feito na
medida, tem que ser bem feito mas tem que ser prático ou não vai pra
frente.

> Na minha opinião — e constato, aliviado, que na opinião de pelo menos dois ou
> três profiças muito mais inteligentes, experientes e bem informados que eu —
> portabilidade total, dado que o SQL não é relacional e é muito mal
> implementado no mundo extraelefantíaco, é um mito, cuja busca tipicamente
> resulta em sistemas que nem são portáveis, nem corretos, nem manteníveis (eita
> palavriña orroroza, alguém tem alguma melhor?), nem escaláveis, nem sequer
> portáveis… eu ia dar o exemplo do Propvs μiga, mas aí é chutar cão defunto.

Vou te contar algo que vai te deixar bem chateado. A maioria das
aplicações Java EE usando Hibernate, normalmente, são independentes de
SGBD. Tendo o driver JDBC correto, elas falam o "dialeto" adequado.
Mas aí cai na discussão do ORM de novo e tal...

Então, onde é que estamos errando: o Hibernate é tão ruim assim? Ou
será que as implementações de bancos de dados é que são completamente
confusas? Ou as duas alternativas? Porque é tão difícil levar para o
mundo dos objetos o modelo relacional ou o modelo objeto-relacional do
PostgreSQL?

> Será que é muita ingenuidade minha achar que linguagem procedural costuma ser
> antítese de escalabilidade?  SQL é declarativo, em primeiro lugar, em que pese

Não chega a ser uma antítese, mas é um dificultador enorme.
Como tudo pode ser reescrito, então, é possível, com muito esforço e
dinheiro, fazer uma aplicação escalar. E aqui a Oracle e IBM tem posto
muito muito dinheiro, que a comunidade PostgreSQL está esforçada em
atingir com os recursos que tem.

> a conveniência de se ter o SQL/PSM e alternativas para suprir as deficiências
> do SQL declarativo… e também acho ‘engraçada’, por assim dizer, essa divisão
> entre base, movimentação de dados, e aplicação.  Desempenho, disponibilidade,
> escalabilidade, responsividade sempre teriam de ser avaliadas no conjunto…

Esta discussão dá uma bela palestra!
Sim, e é aí que alguns de nós tem sobrevivido com consultoria:
entendendo o contexto, conjunto da obra.

>        Pega que é tua, Rangel.  Destrói aí.

Aguardo sequência sua!
[]s
Flavio
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a