У меня есть веб-сервер, который сохраняет файлы кэша и хранит их в течение 7 дней. Имена файлов представляют собой хеши md5, то есть ровно 32 шестнадцатеричных символа, и хранятся в древовидной структуре, которая выглядит следующим образом:
00/
00/
00000ae9355e59a3d8a314a5470753d8
.
.
00/
01/
Вы поняли.
Моя проблема в том, что удаление старых файлов занимает очень много времени. У меня есть ежедневная работа cron, которая запускается
find cache/ -mtime +7 -type f -delete
, который занимает более половины дня. Я беспокоюсь о масштабируемости и влиянии, которое это оказывает на производительность сервера. Кроме того, каталог кеша теперь является черной дырой в моей системе, задерживая случайных невинных du
или find
.
Стандартным решением для LRU-кеша является какая-то куча. Есть ли способ масштабировать это до уровня файловой системы?
Есть ли другой способ реализовать это таким образом, чтобы упростить управление?
Вот идеи, которые я рассмотрел:
- Создайте 7 главных каталогов, по одному на каждый день недели, и очищайте по одному каталогу каждый день. Это увеличивает время поиска файла кэша в 7 раз, усложняет процесс перезаписи файла, и я не уверен, что он будет делать со временем удаления.
- Сохраните файлы в виде больших двоичных объектов в таблице MySQL с индексами по имени и дате. Это казалось многообещающим, но на практике это всегда было намного медленнее, чем FS. Может быть, я делаю это неправильно.
Есть идеи?