O que é pool de banco de dados?


Respostas:


217

O pool de conexões com o banco de dados é um método usado para manter as conexões com o banco de dados abertas, para que possam ser reutilizadas por outras pessoas.

Normalmente, abrir uma conexão com o banco de dados é uma operação cara, principalmente se o banco de dados for remoto. Você precisa abrir sessões de rede, autenticar, ter a autorização marcada e assim por diante. O pool mantém as conexões ativas para que, quando uma conexão for solicitada posteriormente, uma delas seja usada, em vez de ter que criar outra.

Consulte o diagrama a seguir para os próximos parágrafos:

  +---------+
  |         |
  | Clients |
+---------+ |
|         |-+  (1)   +------+   (3)    +----------+
| Clients | ===#===> | Open | =======> | RealOpen |
|         |    |     +------+          +----------+
+---------+    |         ^
               |         | (2)
               |     /------\
               |     | Pool |
               |     \------/
           (4) |         ^
               |         | (5)
               |     +-------+   (6)   +-----------+
               #===> | Close | ======> | RealClose |
                     +-------+         +-----------+

Em sua forma mais simples, é apenas uma chamada de API semelhante (1) a uma chamada de API de conexão aberta que é semelhante à chamada "real". Isso primeiro verifica o pool em busca de uma conexão adequada (2) e, se houver uma disponível, é fornecida ao cliente. Caso contrário, um novo é criado (3).

Uma "conexão adequada" é apenas uma que já tem acesso ao banco de dados usando as informações corretas (como instância do banco de dados, credenciais e possivelmente outras coisas).

Da mesma forma, há uma chamada de API próxima (4) que na verdade não chama a conexão estreita real , mas coloca a conexão no pool (5) para uso posterior. Em algum momento, as conexões na piscina podem estar realmente fechadas (6).

Essa é uma explicação bastante simplista. As implementações reais podem ser capazes de lidar com conexões com vários servidores e várias contas de usuário, elas podem pré-alocar algumas linhas de base de conexões, para que algumas estejam prontas imediatamente, e podem realmente fechar conexões antigas quando o padrão de uso se acalmar.


9
De onde você tem esse pequeno gráfico?
— Adrian Grigore

19
Eu fiz isso do zero (bobo eu). Se você quiser ver alguns gráficos decentes, dê uma olhada na resposta do zengr.
— paxdiablo

1
Se houver uma disponível, que é fornecida ao cliente, caso contrário, uma nova é criada. Da mesma forma, há uma chamada de API próxima que na verdade não chama a conexão estreita real, mas coloca a conexão no pool para uso posterior. Como você mencionou isso, tenho pouca dúvida. Quando 1000 clientes solicitam conexão e não estão fechados. Então, 1000 conexões estão ativas na piscina. Isso será bom para o desempenho da piscina? E deixe-me saber que meu entendimento está um pouco errado?
— Ye Win

@ YeWin, não, isso soa bem. Responda à sua pergunta sobre 1000 conexões sendo deixadas no pool, isso pode acontecer, mas geralmente apenas se você terminar em algum momento com 1000 conexões ativas simultâneas. Caso contrário, haveria reutilização e não chegaria a 1000. Em termos disso, veja meu penúltimo parágrafo, particularmente o "pode ​​realmente fechar conexões antigas quando o padrão de uso se acalmar".
— 22415

1
@DiegoMariani, mais lento do que se eu o tivesse feito manualmente, mais rápido do que se tentasse coagir o MS Word a torná-lo mais fácil :-) #
— 384

104

As imagens falam mais que mil palavras (paxdiablo deu uma descrição incrível):

texto alternativo

Fonte


35
E, aparentemente, boas imagens também falam algumas centenas de peças de arte ASCII :-) #
— 385

@sagar, selecione a resposta que você achou mais útil. Você não tem registro de aceitação.
— zengr

1
Eu vi 4 conexões no Pool.Então, o número de conexão é restrito nesse pool por tipo de pool? Ou o que acontecerá quando a conexão não estiver livre no Pool? Cliente precisa esperar conexão livre ??
— Ye Win

1
@DEADEND Realmente depende de como o pool de conexões é implementado. A maioria dos pools cria uma nova conexão quando as conexões atingem a capacidade máxima. Isso pode continuar crescendo até o banco de dados atingir um limite. Em alguns casos (como o oracle jdbc), você pode especificar "tamanho inicial" e "tamanho máximo" durante a construção do conjunto.
— zengr 28/02

2
Infelizmente, a imagem não diz a coisa mais importante. Ou seja: Por que manter 10, 20, 30, ... número de conexões abertas custa menos para a memória e o desempenho geral do sistema do que abrir uma conexão quando necessário? Como pode ser? 30 vs. 1 é menos caro? Quão?
— Verde

16

Como o nome sugere. Se algumas pessoas querem nadar, elas podem nadar na mesma piscina, faz realmente sentido construir uma nova piscina cada vez que alguém adiciona? Tempo e custo são uma prioridade.


7

O pool de conexões com o banco de dados é simplesmente armazenar em cache as conexões com os bancos de dados, para que possam ser reutilizadas na próxima vez para reduzir o custo de estabelecer uma nova conexão sempre que desejamos conectar-se a um banco de dados.



1

Conceito de pool de conexão não apenas em Java, mas em várias linguagens de programação. Criar um novo objeto de conexão é dispendioso, portanto, um número fixo de conexões é estabelecido e mantido no ciclo de vida, criando um pool virtual Java Just ( http://javajust.com/javaques.html ), consulte a pergunta 14 nesta página

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.