2009-08-27 14 views
10

Sono un principiante di PHP che lavora con alcuni script per visualizzare alcuni articoli di notizie da un database e volevo scoprire un paio di cose.Quale è meglio: mysql_connect o mysql_pconnect

  • Per l'apertura di una connessione ad un database MySQL, che è una scelta migliore mysql_connect o mysql_pconnect?
  • Quali sono i vantaggi o gli svantaggi dell'utilizzo di una connessione persistente al database?
  • E in che tipo di scenario sarà richiesta una connessione persistente?
+2

Duplicato di http://stackoverflow.com/questions/247807/mysqlconnect-vs-mysqlpconnect – Oskar

risposta

19

Se si sta scrivendo una pagina Web non è necessario il collegamento permanente. Ci vogliono troppe risorse. Usa mysql_connect. Riduci al minimo il tempo in cui la tua connessione db è aperta e non utilizzata il più possibile. Apri, prendi ciò che vuoi, chiudi. Non ha bisogno di rimanere aperto mentre gli utenti stanno leggendo. Il collegamento verrà utilizzato alla fine se rispondono - INSERT/andare in un'altra pagina ..

Here sono alcuni buoni punti circa non si utilizza connessione persistente nelle applicazioni web

  • Quando si blocca un tabella, normalmente è sbloccata quando la connessione si chiude, ma poiché le connessioni persistenti non si chiudono, tutte le tabelle che lasciano accidentalmente bloccate rimarranno bloccate e l'unico modo per sbloccarle è aspettare che la connessione si interrompa o uccidere processo. Lo stesso problema di blocco si verifica con le transazioni. (Vedere commenti qui sotto il 23-Apr-2002 & 12-lug-2003)

  • tabelle temporanee Normalmente vengono eliminate quando la connessione si chiude, ma non in quanto connessioni persistenti fanno stretti, tabelle temporanee non sono così temporanea. Se non si rilasciano esplicitamente tabelle temporanee quando si esegue , tale tabella esiste già per un nuovo client che riutilizza la stessa connessione . Lo stesso problema si verifica con l'impostazione delle variabili della sessione . (Vedere i commenti sotto il 19-Nov-2004 & 07-ago-2006)

  • Se PHP e MySQL sono sullo stesso server o rete locale, il tempo di connessione può essere trascurabile, nel qual caso non v'è alcun vantaggio a connessioni persistenti.

  • Apache non funziona bene con connessioni persistenti. Quando riceve una richiesta da un nuovo client, invece di utilizzare uno dei bambini disponibili che ha già una connessione permanente aperta, lo tende a generare un nuovo figlio, che deve quindi aprire una nuova connessione al database . Ciò causa processi in eccesso che stanno appena dormendo, sprecare risorse e causare errori quando raggiungi le tue massime connessioni , in più essa sconfigge qualsiasi vantaggio delle connessioni persistenti. (vedi commenti qui sotto sul 03-feb-2004 e la nota a http://devzone.zend.com/node/view/id/686#fn1)

+1

Il motivo per cui si utilizza mysql_pconnect è esattamente quando si sta creando un'applicazione Web in modo da non dover eseguire l'operazione dispendiosa di connessione al database per ogni pagina visualizzata. – nos

+0

e perché la mia connessione dovrebbe rimanere aperta mentre sto leggendo il mio oroscopo per un esame, potrebbe richiedere 1 ora dopo aver chiesto un'altra pagina ?! –

+0

Grazie, ragazzi. Questo rende le cose molto più chiare per me. – Kwame

1

Si dovrebbe anche guardare mysqli e pdo. mysql-extension è piuttosto vecchia e non supporta le istruzioni preparate mysqli.E pdo supporta più database senza modificare le query.

-1

Si prega di non rispondere più a questa domanda, è stato chiesto e ha risposto altrove. Vedi i link sopra.

+4

Questa non è una risposta, ma dovrebbe essere un commento, invece. –

+2

Grazie per il contrassegno quindi :) –

+2

L'ho annotato perché era l'unica cosa giusta da fare. –

1

È necessario utilizzare mysql_pconnect su siti altamente caricati, quindi la connessione verrà riutilizzata. Questo può migliorare la velocità fino a due volte ...

Ma, se non ti aspetti carichi elevati; usare la normale connessione per le ragioni Svetlozar Angelov di cui sopra.

Problemi correlati