Questo post sul blog mostra i risultati di un confronto delle prestazioni di diversi motori di archiviazione delle sessioni con Magento e sembrano aver concluso che fino a circa 75 utenti simultanei non c'è davvero una differenza di prestazioni tra di loro.
Penso che a questi livelli (avevano circa 5 transazioni al secondo, che sarebbero circa 430k hit in un periodo di 12 ore) il sovraccarico in tutto il resto domina i numeri delle prestazioni che vedi dal momento che file / DB / Memcache / Redis gestiranno tutti felicemente il traffico senza sudare se usato correttamente.
Ciò lascia altri fattori come la scalabilità, l'affidabilità e la sicurezza.
Innanzitutto vorrei dire che tutto ciò che compromette l'archiviazione dei file probabilmente comprometterà qualsiasi altra cosa poiché un utente malintenzionato può quindi semplicemente modificare il codice dell'applicazione o almeno scoprire chiavi e protocolli / credenziali di accesso all'archiviazione anche se hanno sola lettura accesso. L'archiviazione dei file funzionerà bene per un sito a basso volume, è facile da configurare ed è facile ragionare. Per quanto tu dica di aver colpito il disco, una lettura del DB colpirà anche il disco e se il DB può memorizzarlo nella cache, probabilmente anche il tuo sistema operativo avrà memorizzato nella cache il file di sessione. Inoltre, viene letto un solo file e il tuo file system è brillante nel raggiungerlo se ne conosci già il nome. Se stai usando PHP, sai quanti file legge il sistema deve fare solo per servire la tua applicazione? Il rovescio della medaglia è che puoi '
Memcache è relativamente veloce e se stai considerando le soluzioni di classe Memcache in modo più ampio (Redis, ecc.) Ce ne sono alcune che promettono persino persistenza con letture in memoria per la velocità in modo da ottenere il massimo da entrambi i mondi. Sono anche relativamente semplici da ragionare e la natura del valore-chiave delle sessioni è esattamente ciò per cui sono state progettate. Sai quanto dovresti mettere in una sessione per riempire uno di questi? Ad ogni modo, tutte le opzioni ti costringeranno a scendere a compromessi se raggiungi la loro capacità. I dischi si riempiono di file (il numero e il fattore dimensioni qui), gli archivi di cache si riempiono di capacità e i database hanno un numero limitato di righe e gli stessi limiti di capacità del disco dell'approccio dei file. Inoltre, questi sistemi sono distribuiti solo se li esegui in modo distribuito. La maggior parte funziona perfettamente con una configurazione a server singolo. Se li distribuisci, probabilmente hai già distribuito server Web / server database ecc., Quindi i tuoi problemi di sistema distribuito non appariranno sicuramente dalla tua scelta di archiviazione della sessione. Tuttavia, quando si desidera 10 volte il traffico / capacità ecc., Arrivarci è molto più naturale con questo che con lo schema di archiviazione dei file. Alcuni archivi chiave / valore ti permetteranno anche di condurre analisi semplici dei dati della sessione in modo relativamente semplice, ma la maggior parte non ti porterà da nessuna parte vicino a ciò che SQL può fare.
Non sono sicuro del motivo per cui proponi che il database sia più affidabile rispetto alle altre opzioni, ma ottengo il fascino del database poiché la tua applicazione PHP probabilmente ne fa già uso. Ciò significa che non aggiungi un'altra dipendenza server e probabilmente puoi riutilizzare la stessa connessione che usi per recuperare i dati della sessione per ottenere i dati dell'utente, quindi non devi stabilirne uno per i dati, uno per Memcache, ecc. Se indicizzi il tabella bene, funzionerà anche abbastanza velocemente e fornirà una semantica piuttosto semplice che hai già familiarità con la raccolta di vecchie sessioni o anche con l'analisi dei dati di sessione (non sono sicuro del motivo per cui vorresti farlo e se non lo sei, probabilmente non lo fa non importa così tanto). Il ridimensionamento su enormi scale non è così banale come con qualcosa come Redis,
Penso che questa scelta non sia così importante all'inizio. Ogni approccio ha sfide, vantaggi e cose a cui devi pensare. In generale, probabilmente puoi cavartela semplicemente usando le impostazioni predefinite di PHP / qualunque framework tu usi o anche solo la cosa più semplice con cui andare avanti. Se la scelta risulterà negativa in seguito, la tua analisi delle prestazioni ti dirà e sarai armato dei dati necessari per fare le scelte appropriate data la natura specifica del traffico che ricevi. All'inizio, tutto ciò che puoi ragionevolmente avere è una speculazione generale.