Структура каталога кэша
-
03-07-2019 - |
Вопрос
Я нахожусь в процессе внедрения кэширования для своего проекта.Посмотрев на структуры каталогов кэша, я увидел много примеров, таких как:
cache
cache/a
cache/a/a/
cache/a/...
cache/a/z
cache/...
cache/z
...
Вы уловили идею.Другой пример хранения файлов, допустим, наш файл имеет имя IMG_PARTY.JPG
, распространенный способ - поместить его в каталог с именем:
files/i/m/IMG_PARTY.JPG
Некоторые мысли приходят в голову, но я хотел бы знать истинные причины этого.
Файловые системы, выполняющие линейный поиск, быстрее находят файлы, когда их меньше в каталоге.Такая структура тонко распределяет файлы.
Чтобы не испортить * утилиты nix, такие как
rm
, которые принимают конечное число аргументов и удаляют большое количество файлов одновременно , как правило, сложно (хотя приходится передавать этоfind
и т.д.)
Какова настоящая причина?Что такое "хорошая" структура каталогов кэша и почему?
Решение
Каждый раз, когда я делал это, это делалось для того, чтобы избежать медленного линейного поиска в файловых системах.К счастью, по крайней мере, в Linux, это уходит в прошлое.
Однако даже сегодня, с каталогами на основе b-дерева, с очень большим каталогом будет трудно иметь дело, поскольку потребуется вечность и один день, чтобы просто получить список всех файлов, не говоря уже о поиске нужного файла.
Другие советы
Просто используйте даты.Так как вы будете удалять по дате.:)
Если вы это сделаете ls -l
, все файлы должны быть stat()
редактируется для получения подробной информации, что значительно увеличивает время листинга - это происходит независимо от того, использует ли FS хэшированные или линейные структуры.
Таким образом, даже если FS способна справляться с невероятно большими размерами каталогов, есть веские причины не иметь больших плоских структур (их также сложно создавать для резервного копирования).
Я сравнил GFS2 (кластеризованный) с 32 000 файлами в каталоге или упорядоченный в виде древовидной структуры - рекурсивные списки были примерно в 300 раз быстрее, чем получение списка, когда все они были в плоской структуре (получение списка каталогов могло занять до 10 минут)
EXT4 показал аналогичные соотношения, но поскольку конечная точка составляла всего пару секунд, большинство людей этого не заметили бы.