terça-feira, 17 de dezembro de 2002

Trabalhando com conexões a bancos de dados


INTRODUÇÃO
Ai vão algumas dicas de como se trabalhar com conexões com o banco de dados, sem causar problemas ao usuário ou derrubar a performance da aplicação/banco de dados.

CONTEÚDO
Já ouvi várias discussões sobre qual a melhor maneira de se trabalhar com conexões. É claro que existem alguns meios que farão com que você perca um pouco da performance, outras criarão risco em relação a disponibilidade da aplicação.

Gostaria de colocar neste artigo, minhas experiências e os prós e contras de algumas formas de se trabalhar com a conexão com o banco de dados.

UMA CONEXÃO PARA TODAS AS PÁGINAS

O que seria uma conexão para todos usuários?
Creio que muita gente trabalha desta maneira, onde você cria apenas um objeto de conexão dentro do objeto Application e o utiliza em todas páginas. Normalmente o objeto de conexão é instanciado é criado no código do arquivo Global.asa.

Prós
Facilita a manutenção do código, por exemplo, quando mudamos um banco de dados Access de diretório ou trocamos a senha do banco de dados, ao invés de mudarmos esta senha em vários locais.

Contras
Em alguns casos (Access especificamente) o banco de dados limita a quantidade de acessos a determinada conexão com o banco de dados, caso no seu site exista uma grande quantidade de visitas simultâneas, existirá uma grande possibilidade dele ficar indisponível para alguns usuários devido a um erro de conexão com o banco de dados.
Certamente será necessário um tratamento em todas as páginas que verifique a conexão com o banco de dados, caso ela tenha caído (o que pode ocorrer com mais facilidade com alguns tipos de banco) a conexão deverá ser aberta novamente.


UMA CONEXÃO PARA CADA ACESSO

Algo muito normal entre os programadores ASP é criar uma conexão dentro do objeto Session, do mesmo modo que uma conexão para todas as páginas que é criada dentro da rotina Application_OnStart dentro do Global.asa, esse modo de trabalhar é colocado dentro da rotina Session_OnStart.

Prós
Facilita a manutenção do código, por exemplo, quando mudamos um banco de dados Access de diretório ou trocamos a senha do banco de dados. Ao invés de mudarmos esta senha em vários locais.
Evitamos problemas com quantidade de acesso simultâneos na mesma conexão.
Caso a conexão caia, perderemos apenas a conexão daquela sessão (perdendo apenas um usuário) e não vários quando como criamos apenas uma conexão.

Contras
Utilização excessiva da memória do servidor WEB, pois diferente da conexão instanciada dentro da coleção contents do objeto application, para cada sessão no seu website será criada uma conexão, e depois que o usuário sai do website ou fecha seu browser, por padrão, a sessão irá expirar depois de 20 minutos de inatividae, causando um excesso de conexões abertas e objetos instanciados na memória do servidor.


UMA CONEXÃO PARA CADA PÁGINA/ACESSO
Todas as páginas abrirão a conexão com o banco de dados. Ou é colocado no início do código de todas as páginas a conexão com o banco de dados, o que dificulta a manutenção do código, o mais normal nessa forma de desenvolver, é criar um arquivo onde a conexão é aberta e outro arquivo que irá fechar a conexão com o banco de dados e depois colocamos um server include ( <!-- #include file="openconn.asp" -->).
Eu normalmente trabalho desta forma sempre, pois considero a melhor, mas essa é só a minha opinião e creio que existam formas melhores para se trabalhar e várias situações que possam alterar a forma com que trabalhamos.

Prós
Evitamos todos os contras dos outros métodos acima, inclusive o consumo da memória do servidor WEB pois o objeto é criado somente por alguns momentos e depois você fecha a conexão e destrói o objeto (set conn = Nothing).

Contras
A quantidade de conexões com o banco de dados aumenta e pode haver uma perda de performance, pois toda vez que o usuário solicita uma página a conexão será aberta antes.
Caso a conexão com o banco de dados não seja fechada no final das páginas, várias conexões ficarão abertas por um certo tempo.

Este é apenas o meu ponto de vista sobre algumas formas de se trabalhar com as conexões utilizadas nas suas páginas ASP.



Esta matéria foi postada originalmente no ASP4Developers por André Guergolet (site), que na época era "Desenvolvedor de aplicativos voltados a WEB à 3 anos. Atualmente trabalha com aplicativos de monitoração de redes utilizando .NET e outros recursos.". Hoje, vai saber...

0 comentários: