Costumo dizer que aceder à base de dados é como ir às compras, mais vale ir uma vez e trazer o carrinho cheio do que ir 2 vezes e voltar a casa 2 vezes para trazer 2 produtos. Com isto quero dizer que mais vale fazer um acesso à base de dados e trazer um tuplo tamanho familiar, do que ir nem que sejam só duas vezes à base de dados para trazer 2 valores.
Discordo.
ResponderEliminarComo em tantas outras coisas, não hºa uma verdade definitiva quanto á carga de uma query "gigante" versus uma "carrada" de queries.
Pensa em locks (row e table) e em zombie processes e tablespace scans ....
Isso depende. Porque has de trazer comida para uma familia de 4 pessoas se moras sozinho? Acabas por ter de realizar mais esforco e alguma da comida vai-se estragar de certeza :-)
ResponderEliminarPor isso e' que o JDBC tem metodos tipo setFetchSize(), para nao congestionares a rede com dados desnecessarios e nao ocupares a BD com I/O desnecessario.
E' claro que se tens uma familia de 4 pessoas, nao faz sentido ir comprar uma batata de cada vez... depende de situacao para situacao, nao acho que seja algo que possa ser generalizado.
Isso é discutível!
ResponderEliminarTudo dependerá do tipo de acessos que irás fazer. Se estamos a falar de eliminar um pedido ao fazer um pedido enorme penso que não vale a pena.
Irás ter uma transacção mais pesada (a nível de espaço em memória, processamento e leitura de disco).
Sinceramente, se estás a falar apenas de 2 transacções, penso que vale a pena fazer 2 transacções!
É claro que depende do número de "hits da base de dados" e a quantidade de informação que retiras em cada query.
De qualquer forma, em certas situações, a tua analogia é boa ;o)
Adoro quando gero discórdia :D, mas ainda bem pelo menos temos assunto para discutir.
ResponderEliminarClaro que quando digo trazer muita informação digo trazer muita informação útil, não informação que nunca vamos utilizar.
No meu caso em concreto que pode servir de exemplo, a chamada mais simples à base de dados demorava algo a rondar os 3ms, e no mesmo fio de processamento era chamada a BD mais de 10 vezes. Ao agregar toda a informação que precisava numa só chamada que demorava cerca de 4,2ms acho que tive um ganho substancial, e além disso é uma leitura logo estou a usar uma transacção que não bloqueia outras leituras.
Quando se vai ao super-mercado deve-se levar uma lista de compras. O mesmo se aplica a uma base dados. Conforme o que precisamos, assim trazemos.
ResponderEliminarE tal como num super-mercado não nos podemos distrair com as prateleiras cheias de tretas que não precisamos.
Gostei desta analogia do super-mercado... gostei gostei.