Je suppose que la meilleure réponse est que cela dépend. D'après mon expérience, de nombreux facteurs entrent en jeu dans le choix des algorithmes de mise en cache.
Facteurs à considérer
- Lecture / écriture du solde. (Quel pourcentage d'accès est lu par rapport à écrit)
- Quantité de cache.
- Type de média derrière le cache. (S'agit-il de disques SATA lents ou de disques SSD rapides?)
- Hits vs Misses. (À quelle fréquence les choses sont-elles réécrites ou relues?)
- Taille d'accès moyenne (Cela permet de choisir la taille de la page)
- Combien coûtent les lectures et les écritures.
Une fois que vous avez pris en compte tous les différents facteurs, vous devez alors trouver un algorithme de cache qui gère le mieux. Par exemple, disons que vous avez une application où il y a beaucoup d'écritures, de réécritures, de lectures de données récemment écrites et d'une sorte de support tournant. Dans ce cas, vous voudriez une sorte d'algorithme de mise en cache hybride. Pour gérer les données d'écriture, vous souhaiterez peut-être quelque chose comme Wise order of Writes (WOW) et un algorithme LRU pour les données qui ont été lues sur le disque. La raison en est que les accès au disque sont très chers et l'algorithme WOW rendra l'écriture des données plus efficace et la LRU gardera toujours les données fréquemment consultées dans le cache.
Supposons que vous ayez des disques SSD, qui ont un temps d'accès très rapide, vous voudrez peut-être orienter votre choix vers l'algorithme LRU car les accès aux disques sont relativement peu coûteux.
Donc, vraiment, ce que je veux dire, c'est qu'il n'y a pas de «meilleure» réponse. La meilleure réponse est de connaître les facteurs qui s'appliquent à vous et de choisir un algorithme qui les gère le mieux.
Comment trouver l'algorithme pour vous
Profilez votre système. Cela implique généralement l'ajout de code pour conserver les statistiques d'accès à la mémoire. En profilant, vous pouvez voir quels facteurs sont les plus importants pour vous.
Dans le passé, j'ai ajouté du code pour suivre tous les accès à la mémoire sur une période de temps. Plus tard, je cherche des motifs. Je recherche des relectures, des réécritures, des accès séquentiels, des accès aléatoires, etc.
Une fois que vous avez identifié les éléments importants, vous devez examiner tous les différents types d'algorithmes de mise en cache pour voir quels sont les meilleurs éléments.