Como funciona o pool afinal?

4 respostas
V

galera, eu venho estudando sobre pool de conexoes, dúvidas surgiram, mas nao encontro a resposta para elas…
a aplicaçao faz varios select no banco e deixa o resultado em memoria, para que venham os clientes e usem o pool e ai tudo o que eles fizerem sera nesse objeto que veio do pool, entao o cliente achará que está mechendo no banco, enquanto na verdade ele esta mechendo em objetos na memoria…
depois o pool faz as alteraçoes no banco.

ai vem a primeira duvida…
se vem um cliente, o pool entrega pra ele a ultima consulta que o pool fez no banco, ou ele entrega qualquer objeto do pool??

segunda duvida

se vem um cliente e deseja manusear os valores do banco… o pool de conexoes deveria entregar a esse cliente o ultimo objeto do pool que foi alterado, por assim esse cliente estaria mechendo com os valores já “modificados” (embora só esteja em memoria ainda)

alguem poderia esclarecer isso pra mim?
documentos explicando o funcionamento e a arquitetura do pool de conexoes ajudaria bastante!!

4 Respostas

V

Um Pool é um conjunto pré-determinado ou não de recursos que alguém ou algo irá dispobinilizar quando for requisitado.

No exemplo de banco de dados um Pool de Conexões se resumiria a um conjunto de conexões com um número mínimo e um número máximo de conexões que são estabelecidas entre a aplicação e o banco de dados.

Como funciona?
Se sua aplicação fornece um pool de conexões de 1-5, então significa que automaticamente quando seu pool for acionado a primeira vez ele vai levantar uma conexão com o BD e apartir daí, dependendo da necessidade de consultar ou persistir, irá abrir até mais 4 conexões completando o máximo de 5 conexões. E assim então ele vai trabalhando, fornecendo conexões disponíveis a medida que se torna necessário trocar informações com o BD.
Se por um tempo x, determinado ou não, 4 das conexões criadas se tornarem ociosas, alguém ou algo, irá matá-las para que assim então voltemos ao número mínimo, no caso 1.

Qual a vantagem?
Performance de Aplicação x Perfomance Computacional.

Pense que se o paralelismo fosse usado de maneira exagerada a máquina de sua aplicação não iria trabalhar com tanta velocidade. No entanto se você não tiver um recurso que te ofereça mais de um acesso simultâneo à um ponto de destino, no caso o BD, sua aplicação que perde pois todas requisições serão “enfileiradas” até que uma nova conexão se torne disponível.
Pensando nisso existe um pool de conexões, um pool de threads, etc.

Portanto tudo se resume a balanceamento de performance.

Abraços

T

a) O pool de conexões é um pool de conexões, não de consultas. Portanto, não vai ocorrer isso que você está mencionando.
De certa forma, é uma coisa muito simples de entender. Vou contar uma pequena história.
Havia um tempo, não muito distante (no tempo dos seus pais ou avós, talvez) em que era muito difícil fazer uma ligação interurbana. Nesse tempo, você reunia a família inteira e ficava um tempão tentando ligar para a telefonista, para que ela conseguisse fazer uma ligação para a outra cidade. Quando você conseguia isso, quem atendia o telefone na outra cidade chamava todo mundo que pudesse querer falar. Então, você falava com quem queria falar, mas não desligava; passava o telefone para outra pessoa da sua família ou vizinhança, que falava com quem queria falar, e assim por diante. É como se fosse uma série de chamadas, mas você aproveitava a conexão (que era muito, muito difícil e demorada de fazer), de quem já tinha usado a linha antes.
No caso de bancos de dados, a conexão é demorada para ser feita, e deve ser reaproveitada. Mas as coisas são feitas de tal forma que ninguém se confunde nessa história.

b) Provavelmente você está confundindo com o que o Hibernate ou outros mapeamentos de objetos com bancos de dados relacionais fazem, ou seja, podem trabalhar com dados em memória misturados com os dados em banco. Isso não tem a ver com o pool.

V

thingol:
a) O pool de conexões é um pool de conexões, não de consultas. Portanto, não vai ocorrer isso que você está mencionando.
De certa forma, é uma coisa muito simples de entender. Vou contar uma pequena história.
Havia um tempo, não muito distante (no tempo dos seus pais ou avós, talvez) em que era muito difícil fazer uma ligação interurbana. Nesse tempo, você reunia a família inteira e ficava um tempão tentando ligar para a telefonista, para que ela conseguisse fazer uma ligação para a outra cidade. Quando você conseguia isso, quem atendia o telefone na outra cidade chamava todo mundo que pudesse querer falar. Então, você falava com quem queria falar, mas não desligava; passava o telefone para outra pessoa da sua família ou vizinhança, que falava com quem queria falar, e assim por diante. É como se fosse uma série de chamadas, mas você aproveitava a conexão (que era muito, muito difícil e demorada de fazer), de quem já tinha usado a linha antes.
No caso de bancos de dados, a conexão é demorada para ser feita, e deve ser reaproveitada. Mas as coisas são feitas de tal forma que ninguém se confunde nessa história.

b) Provavelmente você está confundindo com o que o Hibernate ou outros mapeamentos de objetos com bancos de dados relacionais fazem, ou seja, podem trabalhar com dados em memória misturados com os dados em banco. Isso não tem a ver com o pool.

Nossa essa história das ligações me fez lembrar minha mãe tentando falar com minha tia em outro país, lembro que havia um intermédio feito por uma telefonista também, hahaha. Isso a uns 15 anos atrás. :stuck_out_tongue:

Anyway, ótima analogia. congratz

V

thingol:

b) Provavelmente você está confundindo com o que o Hibernate ou outros mapeamentos de objetos com bancos de dados relacionais fazem, ou seja, podem trabalhar com dados em memória misturados com os dados em banco. Isso não tem a ver com o pool.

é exatamente isso que eu tenho em mente… o meu conceito de pool conection é referente á àquele cache que o hibernate faz…

Criado 4 de junho de 2010
Ultima resposta 4 de jun. de 2010
Respostas 4
Participantes 3