2009-09-07 10 views
7

È "migliore" (più efficiente, più veloce, più sicuro, ecc.) Per i dati della cache (A) utilizzati su ogni caricamento della pagina nell'array $ _SESSION (ma ancora interrogando una tabella per un flag per ricaricare i dati freschi) o (B) per caricarlo ogni volta dal database?Cache dati in SESSIONE PHP o query da db ogni volta?

Sto utilizzando il metodo cache (A), ma sono preoccupato che con centinaia di utenti, la memoria potrebbe diventare un problema? Sono solo dati semplici, come nome, cognome, compleanno, ecc.

Con entrambi i metodi, è ancora in esecuzione una query. Pensieri?

+0

Ricordare che $ _Session non è in memoria. È su disco per impostazione predefinita. Ovviamente, è possibile utilizzare una memoria di backup del database per la variabile di sessione. – ryeguy

+0

ah si!grazie mille per il promemoria! – Andrew

risposta

6

Se i dati vengono utilizzati su tutte le pagine e sono uguali per tutti gli utenti, non lo memorizzerò in $ _SESSION (che significa avere una copia diversa di tali dati per ciascun utente), ma con un altro mecanismo, come:

  • file di
  • In memoria, con APC per esempio (anche se solo 1 server)
  • In memoria, con memcached, per esempio (se si dispone di diversi server)
  • Se i dati richiedono lunghi calcoli o più query DB da ottenere, la memorizzazione nella cache nel database potrebbe essere un altra possibilità (vorrebbe dire solo 1 domanda per andare a prendere di nuovo, e meno calcoli)


Se i dati non è la stessa per ogni utente (che sembra essere il caso nella vostra situazione, come si sta caching nomi, date di nascita, ...):

  • vorrei fare in modo che solo la cache ciò che è necessario
  • una volta che avete solo pochi dati da memorizzare nella cache, mettendolo in sessione dovrebbe essere abbastanza OK
  • Se lo sei hai davvero tanti utenti, probabilmente avrai altri problemi di scalabilità e probabilmente userò comunque qualcosa come memcached; il che significa che avrete qualche altro modo di caching ;-)

Come sidenote: se si sta facendo la stessa query più e più volte, si DB server dovrebbe memorizzare nella cache è di per sé (per MySQL, sarebbe andare nel "query cache"); quindi, non sarebbe così male come pensi, suppongo - anche se non così ottimizzato ^^

1

Dipende da cosa sei gestore di sessione. Il tuo gestore di sessione potrebbe essere MySQL e quindi la domanda non sarebbe la migliore, ma come ottimizzare la gestione della sessione.

Il gestore di sessione PHP predefinito è file, ma può essere facilmente modificato in mysql.

Se si sta parlando di dati non specifici dell'utente, è sufficiente salvarlo nel DB. Preoccupati dell'ottimizzazione se riscontri problemi più tardi. Di solito è molto più vantaggioso utilizzare un modello di progettazione migliore, quindi pensare all'ottimizzazione in anticipo. Progetta il tuo codice in modo da poter facilmente utilizzare un gestore diverso per l'archiviazione e non avrai problemi di ottimizzazione in seguito.

Se è specifico per l'utente, utilizzare la sessione, ma utilizzare un gestore di sessione appropriato, se necessario.

Problemi correlati