Conexões com Banco de Dados

Conexões com um banco de dados são um recurso importante a ser considerado para a escalabilidade da aplicação. Conforme recomendado, para cada sessão um objeto de conexão deve ser colocado em MainModule. Uma nova instância do objeto de conexão será criada quando uma nova sessão for iniciada, então em um cenário típico cada sessão estabelecerá uma nova conexão com o servidor de banco de dados.

Isso pode causar um problema de escalabilidade se o servidor de banco de dados puder atender apenas um número limitado de conexões simultâneas. Muitos servidores de banco de dados têm limites padrão de algumas centenas de conexões, enquanto outros conseguem lidar com milhares. Conexões de banco de dados devem ser tratadas como recursos limitados e o design da sua aplicação deve evitar atingir o limite superior.

Você pode configurar o servidor para permitir mais conexões simultâneas, mas essa não é a forma ideal de resolver o problema. As abordagens recomendadas são:

1

Habilitar Connection Pooling

Connection pooling é um método para reutilizar conexões de banco de dados com as mesmas propriedades. Algumas bibliotecas de banco de dados implementam pooling por padrão enquanto outras não — verifique sua biblioteca de conexão específica para ver se o pooling está disponível.

Exemplos:

  • O componente TADOConnection combinado com Microsoft SQL Server habilita pooling por padrão.

  • FireDAC também oferece suporte a pooling e pode ser habilitado. Veja a seção do FireDAC para detalhes: https://unigui.com/doc/online_help/firedac.htm

2

Usando uma Biblioteca de Middleware

Quando o número de sessões concorrentes excede o limite superior do servidor de banco de dados, uma camada de middleware pode ajudar a gerenciar conexões de forma eficiente. O middleware cria uma conexão quando necessário e a libera quando não está mais em uso, permitindo que muitas sessões sejam atendidas com um número menor de conexões simultâneas. Algumas bibliotecas de middleware também implementam pooling para melhorar o desempenho.

Bibliotecas de middleware comuns em Delphi:

  • DataSnap — http://docwiki.embarcadero.com/RADStudio/Seattle/en/Developing_DataSnap_Applications

  • DataAbstract — http://www.dataabstract.com/da/

  • kbmMW — http://news.components4developers.com/products_kbmMW.html

Veja também a página do produto de middleware da Embarcadero: http://www.embarcadero.com/products/rad-studio/middleware