2010-01-13 11 views
6

Attualmente, sto aprendo una connessione al database nell'inizializzazione della mia app. È un'app abbastanza piccola, PHP se è pertinente.Con quale frequenza devo chiudere le connessioni del database?

Devo connettermi al database, effettuare chiamate, quindi chiudere e ripetere questo processo per ogni funzione del database che scrivo?

Ad esempio, ho la seguente funzione che acquisisce la variabile $ db dall'inizializzazione della mia app.

function get_all_sections() 
{ 
    global $db; 
    $sql = 'select * from sections'; 

    if (!$db->executeSQL($sql, $result)) 
    { 
     throw new Exception($db->getDatabaseError()); 
     exit(); 
    } 

    $sections = array(); 

    for ($i = 0; $i < $db->numberOfRows($result); $i++) 
    { 
     $sections[] = new Section($db->fetchArray($result, MYSQLI_ASSOC)); 
    } 

    return $sections; 
} 

sarebbe meglio se ho aperto la connessione poi la richiuse dopo Presi le righe? Sembra che molte connessioni siano aperte e chiuse.

+0

Stai utilizzando il pool di connessioni? –

+0

Non al momento. – mculp

risposta

5

Se si dispone di un pool di connessioni su (http://en.wikipedia.org/wiki/Connection_pool), è ok se si desidera ottenere una nuova connessione quando è necessario. TUTTAVIA, direi di avere l'abitudine di trattare qualsiasi risorsa come "limitata" e se apri l'handle del db mantienila in giro il più a lungo possibile.

+2

Ho sempre sentito il consiglio nell'altro modo: * chiudi sempre la connessione al tuo database il prima possibile *. – cregox

3

La connessione al database richiede un tempo limitato. È trascurabile quando si effettua il collegamento su un socket di dominio o named pipe, ma può essere molto più grande se si utilizza una connessione di rete o, peggio ancora, l'open Internet. Lasciatelo collegato per almeno la vita della richiesta.

3

Utilizzare mysql_pconnect per il pool di connessioni e chiudere alla fine di ogni operazione. Il thread non si chiuderà realmente e il thread verrà riutilizzato. In questo modo è sicuro ed efficiente.

2

Poiché le connessioni MySQL di PHP sono abbastanza leggere, è probabile che tu stia aprendo e chiudendo la connessione quando necessario. Lo stesso non vale per altre connessioni di database, come la connessione a SQL Server, che ha connessioni piuttosto pesanti.

In tutti i casi, tuttavia, fare ciò che ha più senso in termini di manutenibilità/logica/dipendenze. Quindi, se scopri di avere un rallentamento misurabile, puoi ottimizzare quelle aree che necessitano della velocità.

In caso di dubbio, seguire la regola d'oro: non ottimizzare in modo prematuro.

1

La soluzione più semplice sarebbe quella di utilizzare mysql_pconnect() - see here

In questo modo se la connessione è già aperto lo utilizza, invece di crearne uno nuovo. In caso contrario, si collegherà di nuovo

+0

Se non lo si chiude quando raggiunge il limite, si riceveranno già troppi client errore credo. Quello che penso, ma per favore correggimi se sbaglio. – tkhuynh

Problemi correlati