Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CleitonGarcia

Desconectar banco

Recommended Posts

Colegas,

 

Me surgiu uma dúvida um quanto tanto tentadora...

 

Ao realizar qualquer tipo de interação com o banco de dados, seja ele qual for, qual a vantagem de desconectar após o código? Ex.:

 

- Conecta Banco

-- Lista dados

- Desconecta banco

 

E se eu tiver várias interações?! É vantajoso desconectar? Ex.:

 

- Conecta (1 vez apenas)

-- Insere dados do usuário

- Desconecta

-- Atualiza logs

- Desconecta

 

Ou se for vantajoso utilizar a desconexão, deveria ser feito apenas uma vez?

 

- Conecta

-- Interação 1

-- Interação 2

-- Interação 3, etc.

- Desconecta

 

O que me dizem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A conexão, exceto uma persistente, sempre será fechada ao final da execução do script. Na maioria dos casos, a execução de um script é tão rápida, que a conexão é mantida por milésimos de segundo.

 

Não é vantajoso desconectar durante a execução de um script. Um dos usos de Registry, é justamente para evitar que, a cada consulta no SGBD, seja criada uma nova conexão.

 

Talvez em interações pequenas vocês não veja a diferença, mas em interações maiores, com N objetos de mapeamento 1:1 com o SGBD (um objeto é referente a uma única tabela), você perceberá a diferença.


 

Esse também é um dos quesitos que leva alguns desenvolvedores a utilizarem Singleton para uma conexão. Pattern o qual não deve ser utilizado para conexões com o SGBD ou qualquer outra fonte de armazenamento.

 

Talvez, isso seja uma dúvida devido a velocidade de um SGBD. Tente utilizar como fonte de armazenamento outros tipos de "storages", por assim dizer. Tal como XML, arquivos TXT, arquivos CSV. Por serem aquivos gravados em disco, e o disco é mais lento, talvez perceberá melhor a perda de desempenho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se não for uma conexão persistente, não é necessário fechar a conexão no final de um script.

 

Por exemplo, a descrição de mysql_close

 

Using mysql_close() isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.

 

Veja também a descrição da conexão da PDO.

 

Upon successful connection to the database, an instance of the PDO class is returned to your script. The connection remains active for the lifetime of that PDO object. To close the connection, you need to destroy the object by ensuring that all remaining references to it are deleted--you do this by assigning NULL to the variable that holds the object. If you don't do this explicitly, PHP will automatically close the connection when your script ends.

 

Todas as sentenças, acima, são verdadeiras quando não falamos de conexões persistentes.

 

A unica "obrigação", por assim dizer, que eu vejo na PDO, é fechar o cursor, da PDOSTatement, a cada consulta utilizando closeCursor. O motivo, está explicado aqui:

 

This method is useful for database drivers that do not support executing a PDOStatement object when a previously executed PDOStatement object still has unfetched rows. If your database driver suffers from this limitation, the problem may manifest itself in an out-of-sequence error.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso foi muito util Gabriel, eu dei uma pesquisada e coloquei uma conexão persistente no meu projeto atual. Como faço varias requisições ao mysql, as vezes mais de uma por segundo, isso aumentou muuito a velocidade!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.