2010-03-08 13 views
5

Sto eseguendo un'applicazione Web che consente a un utente di accedere. L'utente può aggiungere/rimuovere contenuti alla sua "libreria" che viene visualizzata in una pagina denominata "library.php". Invece di interrogare il database per i contenuti della libreria degli utenti ogni volta che caricano "library.php", voglio memorizzarlo globalmente per PHP quando l'utente effettua l'accesso, in modo che la query venga eseguita una sola volta. C'è una buona pratica per fare questo? fx. memorizzare la propria libreria in una matrice in una sessione?Le migliori pratiche per archiviare dati globali in PHP?

Grazie per il vostro tempo

+0

"Globalmente" in genere significa "un'istanza per tutti". Quello che stai cercando è dati per sessione utente. –

risposta

7

Se memorizzare libreria di ogni utente in un $_SESSION come un array, come lei ha suggerito (che è sicuramente possibile) si dovrà fare in modo che tutti gli aggiornamenti l'utente fa alla biblioteca si riflettono immediatamente a quella variabile di sessione.

Onestamente, a meno che non ci sia un po 'di query pesante per andare a prendere una libreria, o se hai un sacco di traffico, mi limiterei a "eseguire query ogni volta che l'utente raggiunge library.php".

+1

Un'altra cosa che potrebbe essere migliore è creare una propria cache che verrà creata quando l'utente si collega (qualcosa come un sito html statico che mostra la libreria) che viene cancellata dopo un determinato periodo di tempo (ad esempio 30 minuti o se l'utente si disconnette) e che verrà aggiornato se non esiste o se è stata eseguita una query UPDATE. – Tobias

+1

Vero - ma a spese di maggiore complessità. Come primo passo, aggiungerei indici e una cache di query alle tabelle della libreria per massimizzare le prestazioni della query. – karim79

0

penso che sarebbe meglio conservarlo in una sessione.
E 'l'utente accede, viene creata la sessione ed è possibile salvare i dati in esso utilizzando il superglobale:

$_SESSION['key'] = "value"; 

È possibile anche Array negozio o tutto il resto c'è e può essere annullata se l'utente si disconnette .

2

Considerare la dimensione dei dati. Moltiplicare quello per il numero massimo di utenti simultanei.

Quindi confrontare la memoria disponibile sul server. Considerare anche se si tratta di un server condiviso; anche altri siti hanno bisogno di risorse.

In base a questo, è probabilmente meglio creare un file che può essere utilizzato (come da commento di Remi), o rimanere nel modulo stateless predefinito e leggere ogni volta. Dubito che la lettura dei dati ogni volta stia creando un sovraccarico.

1

Ogni script PHP termina quando viene completato, quindi i dati non possono essere mantenuti permanentemente in diretta in un'applicazione Web come si farebbe con un'applicazione per PC.

Un modo potrebbe essere sessioni, ma dipende dalla quantità di dati che si desidera salvare. Secondo il tuo esempio stai parlando di una libreria, quindi mi sembra che debba essere salvata una grande quantità di dati, in tal caso il DB è la strada da percorrere, e sì devi interrogarlo ogni volta.

Un altro modo potrebbe essere di salvarli in un array all'interno di un file php, ma nello stesso modo in cui si deve interrogare il DB ogni volta, si dovrebbe includere tale file php ogni volta.

1

Dal momento che si tratta di un'ottimizzazione delle prestazioni db, vorrei suggerire che si dà un'occhiata al memcached che corrisponde al tuo problema perfettamente:

memcached è [..] destinati ad essere utilizzati per accelerare le applicazioni web dinamiche di allevia il carico del database.

0

si cura per le prestazioni; Si prega di notare:

  • sessione può utilizzare banca dati o file di per memorizzare i dati.
  • database è qui per essere usato al posto di file, per la sua prestazione e capacità.

utilizzare database, è progettato per essere utilizzato esattamente in tali situazioni!

Problemi correlati