Risultati memorizzati in una sessione - buona idea?

3

Per dare un po 'di background, diciamo che è una pagina generica dei risultati, che è paginata in modo che ci siano X risultati per pagina.

Generalmente per fare questo, ho due domande sulla pagina:

  1. per ottenere il numero totale di risultati
  2. per ottenere i risultati, limitando il gruppo di risultati della pagina corretta

Tuttavia, recentemente ho cercato di ridurre le query che il sito sta facendo, e ho pensato che un modo per farlo sarebbe quello di fare la query solo se alcuni parametri della pagina sono cambiati (tranne ovviamente il numero di pagina)?
Ciò quindi memorizzerebbe nella cache tutti gli ID dei risultati in una sessione, che possono essere tagliati quando ho bisogno di restituire il set di risultati corretto per quella pagina.

Stavo cercando di guardare in rete per vedere se ci sono aspetti negativi di questo metodo, ma ho trovato pochissime informazioni a riguardo.

Qualcuno l'ha già fatto prima? È una buona idea?

    
posta Nick 14.11.2012 - 11:06
fonte

2 risposte

4

È una cattiva idea.

Supponendo la configurazione di default per le sessioni, dovresti sostituire le chiamate al database con le chiamate al filesystem, dovresti passare da una memoria che si ridimensiona a quella che generalmente non funziona. Le sessioni sono estremamente convenienti, ma dovrebbero essere utilizzate con la massima parsimonia possibile, in particolare l'aroma basato su file (predefinito). Se li usi per il caching, saresti impostandoti per un mondo di guai :

PHP writes its session data to a file by default. When a request is made to a PHP script that starts the session (session_start()), this session file is locked. What this means is that if your web page makes numerous requests to PHP scripts, for instance, for loading content via Ajax, each request could be locking the session and preventing the other requests from completing.

The other requests will hang on session_start() until the session file is unlocked. This is especially bad if one of your Ajax requests is relatively long-running.

E perché vorresti ridurre le query che il sito sta facendo in primo luogo? Se hai identificato che le query sono in qualche modo, dovresti prima provare a ottimizzarle. La memorizzazione nella cache dei set di risultati oltre all'ottimizzazione delle query sarebbe ottima, ma eseguita correttamente:

Ci sono vari altri backend di cache che puoi provare (ad esempio DynamoDB ), ma memcached dovrebbe essere sufficiente per la maggior parte scenari, e sarebbe certamente più adatto per i risultati di paginazione rispetto alle sessioni.

    
risposta data 14.11.2012 - 11:17
fonte
1

Se il set di risultati può essere piuttosto ampio e l'utente probabilmente non vuole mai eseguire la scansione di tutte le pagine, è probabilmente un grosso spreco di risorse leggere e archiviare tutti i risultati per ogni evenienza.

Una strategia che ha funzionato abbastanza bene per me in passato è la cache di alcuni risultati, e per raddoppiare la dimensione della cache tanto più l'utente entra nei risultati. Quando un utente supera la pagina 2, il sistema legge le pagine 3 e 4. Se supera la pagina 4, verranno lette le pagine 5..8. In questo modo, il numero di query è limitato ma non dovrò mantenere una cache con tutti i milioni di risultati.

    
risposta data 14.11.2012 - 11:30
fonte

Leggi altre domande sui tag