Immagino che la risposta migliore sia che dipende. Nella mia esperienza ci sono molti fattori che vanno nella scelta degli algoritmi di memorizzazione nella cache.
Fattori da considerare
- Bilancia lettura / scrittura. (Quale percentuale di accessi sono letture rispetto a scritture)
- Quantità di cache.
- Tipo di supporto dietro la cache. (Sono unità SATA lente o unità SSD veloci?)
- Hits vs Misses. (Con che frequenza vengono riscritte o rilette le cose?)
- Dimensione di accesso media (Questo va a scegliere la dimensione della pagina)
- Quanto costano le letture e le scritture.
Una volta considerati tutti i diversi fattori, è quindi necessario trovare un algoritmo di cache che gestisca meglio. Ad esempio, supponiamo che tu abbia un'applicazione in cui ci sono molte scritture, alcune riscritture, letture di dati scritti di recente e una sorta di media di spinning. In questo caso si vorrebbe una sorta di algoritmo di cache ibrida. Per gestire i dati di scrittura potresti voler qualcosa come Wise order of Writes (WOW) e un algoritmo LRU per i dati che sono stati letti dal disco. La ragione di ciò è che gli accessi al disco sono molto costosi e l'algoritmo WOW renderà più efficiente la scrittura dei dati e la LRU manterrà i dati a cui si accede frequentemente sempre nella cache.
Supponiamo che tu abbia dischi SSD, che hanno tempi di accesso molto rapidi, potresti voler orientare la tua scelta verso l'algoritmo LRU poiché gli accessi al disco sono relativamente economici.
Quindi davvero quello che voglio dire è che non esiste una risposta "migliore". La migliore risposta è conoscere i fattori che si applicano a te e scegliere un algoritmo che li gestisca meglio.
Come trovare l'algoritmo per te
Profila il tuo sistema. Questo di solito comporta l'aggiunta di codice per conservare le statistiche per gli accessi alla memoria. Profilando puoi vedere quali fattori sono più importanti per te.
In passato ho aggiunto codice per tenere traccia di tutti gli accessi alla memoria per un periodo di tempo. Poi più tardi cerco modelli. Cerco riletture, riscritture, accesso sequenziale, accesso casuale, ecc.
Dopo aver identificato le cose importanti, è necessario esaminare tutti i diversi tipi di algoritmi di memorizzazione nella cache per vedere quali gestiscono le cose meglio.