Количество файлов в одном каталоге (на примере организации кэша)

Статус
В этой теме нельзя размещать новые ответы.

SoaringHawk

Постоялец
Регистрация
25 Апр 2009
Сообщения
61
Реакции
2
Есть каталог "./cache/", в него складываются закэшеные страницы типа "0a0fb2519e3ba5dc08c8616f43f5dbfa.html" (ака статика). Накопилось уже порядка 50к таких файлов и все лежат в cache. Это нормально, с точки зрения производительности? Стоит ли переделать структуру к виду "./cache/a/" (т.е. добавить подкаталоги по первому символу файла и разбить эту кучу файлов по алфавиту)?

В никсах (в моем случае CentOS) вообще играет какую-нибудь роль количество файлов на один каталог? Например время доступа к "одинокому" файлу будет ровняться времени доступа к файлу среди 50к?
 
Играет, увеличивается время поиска в файловой таблице, плюс головки винчестера ползают туда-сюда и задрачивают винт, на большом количестве файлов тормоза могут быть ощутимые.

По моим прикидкам желательно не более 1-5к файлов в одном каталоге.

Можно кешировать не всю страничку целиком, а только неизменяемые части вроде шапки или футера.
 
Как показывает моя практика, на современных файловых системах кол-во файлов в директории особого рояля не играет (если не пытаться получить листинг этой директории).
 
Как показывает моя практика, на современных файловых системах кол-во файлов в директории особого рояля не играет (если не пытаться получить листинг этой директории).
да, совершенно верно. Когда Вы обращаетесь к какому-то заданному файлу, то роли рядомстоящих файлов в этом вообще нет.
Если просматривать всё содержимое - то нагрузка конечно будет ощутимой, и при поиске может быть задержка.
 
Играет, увеличивается время поиска в файловой таблице ... на большом количестве файлов тормоза могут быть ощутимые
тест показал обратное
да, совершенно верно. Когда Вы обращаетесь к какому-то заданному файлу, то роли рядомстоящих файлов в этом вообще нет.
Если просматривать всё содержимое - то нагрузка конечно будет ощутимой, и при поиске может быть задержка.
Нашел скрипт и провел тест: по 100000 раз открывал и закрывал файлы. Один "одинокий" и один среди ~54к.
Код:
1268924264.65
1268924267.05
Elepsed Time: 2.39999985695

1268924267.05
1268924269.46
Elepsed  Time: 2.41000008583
Первое время - доступ к файлу из кучи, второе - к "одиночке". Несколько раз прогнал тест - результат практически один в один. :)

Что касается получения листинга, тут, конечно понятно, что "куча" проиграет. Но это не особо важно. Скрипт очистки кэша будет работать через opendir, а не glob :D

Но меня еще интересует ограничение на количество файлов в одном каталоге (как в винде). Цитата из вики (описание ext4:(
Break 32,000 subdirectory limitIn ext3 the number of subdirectories that a directory can contain is limited to 32,000. This limit has been raised to 64,000 in ext4, and with the "dir_nlink" feature it can go beyond this (although it will stop increasing the link count on the parent). To allow for continued performance given the possibility of much larger directories, Htree indexes (a specialized version of a B-tree) are turned on by default in ext4. This feature is implemented in Linux kernel 2.6.23. Htree is also available in ext3 when the dir_index feature is enabled.
Имеется ввиду рекурсивное вложение, т.е. "/dir/subdir1/subdir2/subdir3/.../subdir64000/"? Только кому может такое понадобиться... :nezn:
 
Но меня еще интересует ограничение на количество файлов в одном каталоге (как в винде).
Теоретически я не сильно подкованн в ФС семейства ext*, но на практике стоит файлсервер с ext2 и там у меня в одной из папок лежит толи 150 толи 170 тысяч файлов. По понятным причинам я сейчас не полезу смотреть сколько их там точно лежит :D но явно проблем у тебя при хранении 50к файлов в папке не будет.
Справедливости ради хочу сказать, что пару лет назад у меня упала ФС на этом же хранилище когда в папке появилось около 250к+ файлов. Но я не могу сказать что это косяк из за количества, так как работа там была и через винду и не через винду и у меня есть веские аргументы в пользу того что падение было вызвано несовместимостью в записи имен файлов.
Ну а про ограничения виндовых ФС ты тоже погорячился, как такового ограничения на количество файлов в директории нет, просто вся NTFS не выдержит больше 700-750 миллионов файлов. А так, хоть в 1 папку их положи - пофиг. Я 17 миллионов положил и ничего, только удалялась папка потом ну очень долго :D
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху