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

Тема в разделе "Администрирование серверов", создана пользователем SoaringHawk, 18 мар 2010.

Статус темы:
Закрыта.
Модераторы: mefish, stooper
  1. SoaringHawk

    SoaringHawk Постоялец

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

    В никсах (в моем случае CentOS) вообще играет какую-нибудь роль количество файлов на один каталог? Например время доступа к "одинокому" файлу будет ровняться времени доступа к файлу среди 50к?
     
  2. General Fizz

    General Fizz Боевой Генерал :)

    Регистр.:
    11 апр 2007
    Сообщения:
    753
    Симпатии:
    396
    Играет, увеличивается время поиска в файловой таблице, плюс головки винчестера ползают туда-сюда и задрачивают винт, на большом количестве файлов тормоза могут быть ощутимые.

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

    Можно кешировать не всю страничку целиком, а только неизменяемые части вроде шапки или футера.
     
    SoaringHawk нравится это.
  3. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Как показывает моя практика, на современных файловых системах кол-во файлов в директории особого рояля не играет (если не пытаться получить листинг этой директории).
     
    SoaringHawk нравится это.
  4. smr_nerv

    smr_nerv Писатель

    Регистр.:
    12 фев 2010
    Сообщения:
    5
    Симпатии:
    1
    да, совершенно верно. Когда Вы обращаетесь к какому-то заданному файлу, то роли рядомстоящих файлов в этом вообще нет.
    Если просматривать всё содержимое - то нагрузка конечно будет ощутимой, и при поиске может быть задержка.
     
    SoaringHawk нравится это.
  5. SoaringHawk

    SoaringHawk Постоялец

    Регистр.:
    25 апр 2009
    Сообщения:
    61
    Симпатии:
    2
    тест показал обратное
    Нашел скрипт и провел тест: по 100000 раз открывал и закрывал файлы. Один "одинокий" и один среди ~54к.
    Код:
    1268924264.65
    1268924267.05
    Elepsed Time: 2.39999985695
    
    1268924267.05
    1268924269.46
    Elepsed  Time: 2.41000008583
    Первое время - доступ к файлу из кучи, второе - к "одиночке". Несколько раз прогнал тест - результат практически один в один. :)

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

    Но меня еще интересует ограничение на количество файлов в одном каталоге (как в винде). Цитата из вики (описание ext4:(
    Имеется ввиду рекурсивное вложение, т.е. "/dir/subdir1/subdir2/subdir3/.../subdir64000/"? Только кому может такое понадобиться... :nezn:
     
  6. lift

    lift Читатель

    Заблокирован
    Регистр.:
    1 июл 2007
    Сообщения:
    2.226
    Симпатии:
    1.378
    Теоретически я не сильно подкованн в ФС семейства ext*, но на практике стоит файлсервер с ext2 и там у меня в одной из папок лежит толи 150 толи 170 тысяч файлов. По понятным причинам я сейчас не полезу смотреть сколько их там точно лежит :D но явно проблем у тебя при хранении 50к файлов в папке не будет.
    Справедливости ради хочу сказать, что пару лет назад у меня упала ФС на этом же хранилище когда в папке появилось около 250к+ файлов. Но я не могу сказать что это косяк из за количества, так как работа там была и через винду и не через винду и у меня есть веские аргументы в пользу того что падение было вызвано несовместимостью в записи имен файлов.
    Ну а про ограничения виндовых ФС ты тоже погорячился, как такового ограничения на количество файлов в директории нет, просто вся NTFS не выдержит больше 700-750 миллионов файлов. А так, хоть в 1 папку их положи - пофиг. Я 17 миллионов положил и ничего, только удалялась папка потом ну очень долго :D
     
    SoaringHawk нравится это.
Статус темы:
Закрыта.