Questo post sul blog mostra i risultati di un confronto delle prestazioni di diversi motori di storage di sessione 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 (avessero circa 5 transazioni al secondo, che sarebbero circa 430.000 accessi in un periodo di 12 ore) il sovraccarico in tutto il resto domina i numeri delle prestazioni che si vedono dal momento che file / DB / Memcache / Redis saranno tutti gestiscono felicemente il traffico senza sudare se usati correttamente.
Questo lascia altri fattori come scalabilità, affidabilità e sicurezza.
In primo luogo vorrei dire che tutto ciò che compromette lo spazio di archiviazione del tuo file probabilmente comprometterà qualsiasi altra cosa poiché un utente malintenzionato può semplicemente modificare il codice dell'applicazione o per lo meno scoprire chiavi e protocolli / credenziali di accesso allo storage anche se hanno accesso di sola lettura. Lo storage di file funziona bene per un sito a basso volume, è facile da configurare ed è facile da ragionare. Per quanto tu dica di aver colpito il disco, una lettura di DB colpirà anche il disco e se il DB può memorizzarlo nella cache, anche il tuo sistema operativo avrà memorizzato nella cache il file di sessione. Inoltre, il suo unico file è stato letto e il tuo file system è brillante nel raggiungerlo se già conosci il suo nome. Se stai usando PHP, sai quanti file legge che il sistema deve fare solo per servire la tua applicazione? Il rovescio della medaglia è che non si può andare troppo lontano perché si raggiungerà rapidamente il limite del numero di file che è possibile conservare su un singolo disco.
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ò che questi sono stati progettati per fare. Sai quanto dovresti mettere in una sessione per riempire uno di questi? In entrambi i casi, tutte le opzioni ti costringono a scendere a compromessi se raggiungi la loro capacità. I dischi si riempiono di file (il numero e il fattore di dimensione qui), i depositi di cache si riempiono di capacità ei database hanno un numero limitato di righe e gli stessi limiti di capacità del disco dell'approccio dei file. Inoltre, questi sistemi vengono distribuiti solo se li si esegue in modo distribuito. La maggior parte funziona bene con una singola configurazione del server. Se li distribuisci, probabilmente hai già distribuito server web / server di database, ecc. Quindi i tuoi problemi di sistema distribuiti non appariranno certamente dalla tua scelta di archiviazione di sessione. Tuttavia, quando si desidera 10 volte il traffico / la capacità ecc., Arrivarci è molto più naturale di quanto non lo sia con lo schema di archiviazione dei file. Alcuni archivi chiave / valore ti permetteranno anche di condurre semplici analisi dei dati della sessione in modo relativamente semplice, ma la maggior parte non ti porterà vicino a ciò che SQL può fare.
Non sono sicuro del motivo per cui proponi che il database possa essere più affidabile delle altre opzioni, ma ottengo il fascino del database dal momento che probabilmente la tua applicazione PHP lo usa già. Ciò significa che non si aggiunge un'altra dipendenza del server e si può probabilmente riutilizzare la stessa connessione che si usa per recuperare i dati della sessione per ottenere i dati dell'utente in modo da non doverne stabilire uno per i dati, uno per Memcache, ecc. tavolo bene, si esibirà anche abbastanza velocemente e fornisce semantica abbastanza semplice con cui hai già familiarità con il recupero di vecchie sessioni o anche l'analisi dei dati di sessione (non sono sicuro del motivo per cui vorrai e, se non lo sei, probabilmente non lo fa t importa così tanto). Scalare a massicce scale non è così banale come con qualcosa come Redis, ma passare da un server PHP a due sia l'accesso allo stesso DB è piuttosto semplice.
Penso che questa scelta non sia così importante all'inizio. Ogni approccio ha sfide, vantaggi e cose a cui devi pensare. Parlando in generale, è probabile che si possa farla franca solo usando le impostazioni predefinite di PHP / qualunque sia la struttura che si utilizza o anche solo la cosa più semplice da seguire. Se in seguito la scelta si rivelerà errata, l'analisi delle prestazioni ti comunicherà e sarai armato con i dati necessari per effettuare le scelte appropriate in base alla natura specifica del traffico. Di fronte, tutto ciò che si può ragionevolmente fare è una speculazione generale.