Я думаю, найкраща відповідь - це залежить. На мій досвід, існує багато факторів, які входять у вибір алгоритмів кешування.
Фактори, які слід враховувати
- Читання / запис балансу. (Який відсоток доступу читається проти запису)
- Обсяг кешу.
- Тип носія за кешем. (Це повільні диски SATA або швидкі SSD-накопичувачі?)
- Хіти проти Місс. (Як часто речі переписуються чи перечитуються?)
- Середній розмір доступу (це залежить від вибору розміру сторінки)
- Наскільки дорого читають і пишуть.
Після розгляду всіх різних факторів вам потрібно знайти алгоритм кешування, який найкраще обробляє. Наприклад, скажіть, що у вас є програма, у якій багато записів, переписується, читається нещодавно написані дані та якісь спінінг-носії. У цьому випадку ви хочете свого роду гібридний алгоритм кешування. Для обробки даних запису вам може знадобитися щось на кшталт Мудрий порядок записів (WOW) та алгоритм LRU для даних, зчитаних з диска. Причиною цього є те, що доступ до диска є дуже дорогим, а алгоритм WOW зробить більш ефективним записування даних, і LRU буде постійно зберігати дані, які часто отримують доступ до кешу.
Скажімо, у вас є диски SSD, які мають дуже швидкий час доступу, можливо, ви захочете перенести свій вибір до алгоритму LRU, оскільки доступ до диска порівняно недорогий.
Тож справді, що я хочу сказати, це те, що немає "найкращої" відповіді. Найкраща відповідь - це знати фактори, які застосовуються до вас, і вибрати алгоритм, який найкраще справляється з ними.
Як знайти алгоритм для вас
Профілюйте свою систему. Зазвичай це включає додавання коду для збереження статистики для доступу до пам'яті. За допомогою профілювання ви можете бачити, які фактори є найбільш важливими для вас.
Раніше я додав код для відстеження всіх доступів до пам'яті протягом певного періоду часу. Потім пізніше шукаю візерунки. Я шукаю перечитування, повторне записування, послідовний доступ, випадковий доступ тощо.
Після того, як ви визначили важливі речі, вам слід переглянути всі різні алгоритми кешування, щоб побачити, яка обробка речей найкраща.