Wagner, creio que seus programadores estão certos. Se você pode resolver
puxando os dados “necessários” em consulta só, é correto. O que não poderia
acontecer é puxar 10.000 registros para no fim exibir apenas 100. Agora, tem
que haver coerência na consulta, os joins e groups tem que se beneficiar dos
índices, para que não haja uma sobrecarga no servidor. Afinal, a linguagem
SQL foi feita pra isso. Agora, quanto a quantidade de conexões, tem que ser
fazer uso do pool de conexões, se houver disponibilidade.

 

De: Wagner Bonfiglio [mailto:[email protected]] 
Enviada em: segunda-feira, 25 de maio de 2009 12:34
Para: Comunidade PostgreSQL Brasileira
Assunto: Re: [pgbr-geral] [Meio-Off] Programação com acesso ao BD

 

Olá André,

obrigado pela resposta.. O que parece acontecer é algo do tipo:

O usuário faz uma consulta de carros e pede para separar por marca.. A
maneira de mostrar eh assim:

Fiat
+ (vc pode abrir e ver os carros da Fiat)
  - Palio 
  + (pode abrir e ver os Palio's disponíveis)
    - 2005 preto
    - 2006 amarelo
    - 2007 cinza
  - Uno
  +
     - 2003 Azul
     - 2009 Preto

Ford
 ...
 ...
 ...


Então, o resultado viria completo, mais ou menos assim:

Fiat | Palio | 2005 | Preto
Fiat | Palio | 2006 | Amarelo
Fiat | Palio | 2007 | Cinza
Fiat | Uno  | 2003 | Azul
Fiat | Uno  | 2009 | Preto
Ford ...
...
...

E no código ele vai tratando no Array...

Só que, para montar esse resultado formatado assim, ele usou mais de uma
tabela, com joins, group by, etc etc etc



A alternativa seria fazer uma consulta para saber as marcas (retornaria Fiat
e Ford), depois eu faria outra para retornar os carros daquela marca (pra
Fiat retornaria Palio e Uno), e por último eu buscaria quais {Palio's,
Uno's} tem no banco, retornando só (2005, Preto), (2006, Amarelo), (2007,
Cinza), etc..




Esse foi um exemplo relativamente simples, mas quando temos muitas tabelas,
muitas ligações, muitas restrições, eu acho que fazer essas consultas
pequenas e mais específicas podem ser mais rápidas no final do que fazer uma
consulta só que retorne tudo oragnizado e geral, organizando tudo no
código...


Eu imagino que cada um tenha o seu ponto do vista mesmo, e também imagino
que cada caso é um caso, mas essa questão surgiu durante a modelagem de um
novo sistema, e causou uma discordância pois ele queria uma modelagem que
permitisse ele a fazer uma consulta grande, enquanto eu preferi por uma
modelagem que organizasse melhor os dados mas ficaria muito difícil para ele
fazer essa mega-consulta....

Seria interessante se tivesse algum artigo sobre isso, com estudo de caso e
tal... Mas não achei nada numa busca rápida :/




2009/5/25 Andre Fernandes <[email protected]>

Bom dia,

esse é um assunto realmente complicado, muitas pessoas costumam discutir
sobre isso. 
Se a conexão for permanente (ou seja, entre cada consulta não temos de abrir
novas conexões), então realmente pequenas consultas são a melhor opção. 
Contudo, como é oneroso manter conexões abertas por muito tempo com o banco
de dados, normalmente temos um impasse que precisa ser analisado caso a
caso, visto que a abertura e fechamento de conexões é algo caro, contudo
consultas muito pesadas também o são. 
Precisas verificar no caso em específico qual é menos caro para a
performance do sistema, contudo eu sou adepto de evitar muitas conexões ao
banco, principalmente se houver muitos usuário simultâneos previstos. 
O pensamento de teu programador teve uma falha apenas, a meu ver (isto é uma
opnião pessoal, há quem pense diferente): os dados precisam sair do banco de
dados já tratados (salvo formatação), para isso temos um banco com tantos
recursos como o PostgreSQL. Mas volto a falar, isso é minha opnião, temos
outras correntes e pessoas que discordam disso.

Espero ter ajudado um pouco,
Atenciosamente,

2009/5/25 Wagner Bonfiglio <[email protected]>

Olá senhores...

Esses dias eu estava conversando com um dos programadores aqui da minha
empresa e percebi um hábito que ele tem e que eu não concordei muito, mas
fiquei com uma dúvida no ar...
(OBS: trata-se de programação WEB)

Ele disse que prefere fazer uma consulta mais pesada mas que retorne o
máximo de dados possíveis de uma só vez, para que o tratamento seja feito
dentro do código e assim evitar o excesso de conexões ao banco...

Eu quando era programador preferia fazer várias consultas leves, pensando
mais no sentido de evitar que uma consulta exigisse muito do banco de
dados...

Vocês tem alguma opinião formada sobre isso? Ou melhor, existe alguma
verdade absoluta sobre melhor prática nesse sentido?

Valeu,
   Wagner Bonfiglio

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
André de Camargo Fernandes
Cel: (11) 7421-1379

yellow belt <http://www.javablackbelt.com/UserView.wwa?userId=10305874>  on
JavaBlackBelt



_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

 

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a