Conexão de banco de dados - Database connection

Uma conexão de banco de dados é um recurso da ciência da computação que permite que um software cliente converse com um software servidor de banco de dados, esteja ou não na mesma máquina. É necessária uma conexão para enviar comandos e receber respostas, geralmente na forma de um conjunto de resultados.

As conexões são um conceito-chave na programação centrada em dados . Uma vez que alguns motores DBMS requerem um tempo considerável para se conectar, o pool de conexão foi inventado para melhorar o desempenho. Nenhum comando pode ser executado em um banco de dados sem uma conexão "aberta e disponível" para ele.

As conexões são criadas fornecendo a um driver ou provedor subjacente uma string de conexão , que é uma maneira de endereçar um banco de dados ou servidor específico e instância, bem como credenciais de autenticação do usuário (por exemplo, Server = sql_box; Database = Common; User ID = uid ; Pwd = senha; ). Uma vez que a conexão foi construída, ela pode ser aberta e fechada à vontade, e as propriedades (como a duração do tempo limite do comando ou transação , se houver) podem ser definidas. A string de conexão é composta por um conjunto de pares de chave / valor, conforme determinado pela interface de acesso a dados e pelo provedor de dados em uso.

Muitos bancos de dados (como PostgreSQL ) permitem que apenas uma operação seja realizada por vez em cada conexão. Se uma solicitação de dados (uma instrução SQL Select ) for enviada ao banco de dados e um conjunto de resultados for retornado, a conexão será aberta, mas não estará disponível para outras operações até que o cliente termine de consumir o conjunto de resultados. Outros bancos de dados, como o SQL Server 2005 (e posterior), não impõem essa limitação. No entanto, bancos de dados que fornecem várias operações por conexão geralmente incorrem em muito mais sobrecarga do que aqueles que permitem apenas uma única tarefa de operação por vez.

Pooling

As conexões de banco de dados são finitas e caras e podem levar um tempo desproporcionalmente longo para serem criadas em relação às operações realizadas nelas. É ineficiente para um aplicativo criar, usar e fechar uma conexão de banco de dados sempre que precisa atualizar um banco de dados.

O pool de conexão é uma técnica projetada para aliviar esse problema. Um pool de conexões de banco de dados pode ser criado e, em seguida, compartilhado entre os aplicativos que precisam acessar o banco de dados.

O objeto de conexão obtido do pool de conexão geralmente é um invólucro em torno da conexão de banco de dados real. O wrapper entende seu relacionamento com o pool e oculta os detalhes do pool do aplicativo. Por exemplo, o objeto wrapper pode implementar um método "fechar" que pode ser chamado da mesma forma que o método "fechar" na conexão com o banco de dados. Ao contrário do método na conexão com o banco de dados, o método no wrapper pode não fechar realmente a conexão com o banco de dados, mas, em vez disso, retorná-la ao pool. O aplicativo não precisa estar ciente do pool de conexão ao chamar os métodos no objeto wrapper.

Essa abordagem incentiva a prática de abrir uma conexão em um aplicativo apenas quando necessário e fechá-la assim que o trabalho for concluído, em vez de manter uma conexão aberta por toda a vida do aplicativo. Dessa maneira, um número relativamente pequeno de conexões pode atender a um grande número de solicitações. Isso também é chamado de multiplexação .

Em uma arquitetura cliente / servidor, por outro lado, uma conexão persistente é normalmente usada para que o estado do servidor possa ser gerenciado. Este "estado" inclui cursores do lado do servidor, produtos temporários, configurações funcionais específicas de conexão e assim por diante.

Uma falha de aplicativo ocorre quando o pool de conexão transborda. Isso pode ocorrer se todas as conexões no pool estiverem em uso quando um aplicativo solicitar uma conexão. Por exemplo, o aplicativo pode usar uma conexão por muito tempo quando muitos clientes tentam acessar o site ou uma ou mais operações são bloqueadas ou simplesmente ineficientes.

Veja também

Referências

  • Interface IDbConnection no MSDN
  • Whitepaper sobre gerenciamento e monitoramento de conexões do .NET.
  • Artigo Obtendo e permanecendo conectado.
  • Guia do Mochileiro para Visual Studio e SQL Server (7ª edição) Addison Wesley, William Vaughn, ISBN  978-0321243621

links externos