@User782

Сколько можно файлов поместить в одну папку без нагрузки на открытие файла?

Уважаемые знатоки, подскажите сколько можно файлов поместить в одну папку без нагрузки на открытие файла на сервере?
100 000 файлов txt если поместить в папку и открыть какой-нибудь от туда файл, то он дольше будет открываться, чем если бы в папке находилось например 50 000 или 10 000 файлов?
  • Вопрос задан
  • 83 просмотра
Решения вопроса 3
DevMan
@DevMan
на открытии файлов их количество в директории не влияет.

а влияет на получение списка файлов в директории, если такой потребуется.
Ответ написан
saboteur_kiev
@saboteur_kiev
software engineer
Если используется полный путь к файлу, то и в NTFS и в линуксовых файловых системах, файл будет открываться практически с одной скоростью.
Получить список файлов - это будет тормозить.
Ответ написан
@rPman
Это плохая идея, размещать много файлов в одной директории.

Даже если файловые системы очень эффективно работают с конкретным файлом из директории, к сожалению работа со всей директорией огромного размера разными утилитами либо сильно замедлится либо вообще будут ошибки, к примеру в linux использование масок * не будет доступно, так как они разворачиваются как аргументы командной строки, лимитированного размера, а еще очень медленно (проблемы начинаются после нескольких десятков тысяч файлов), да простейшее удаление поставит в тупик обывателя.

Классическое решение, раскидывать файлы по каталогам (при необходимости, в несколько уровней) используя в качестве имени каталогов - части хеша (любая адекватная функция, например hex от байтов crc32).

А работать с файлами придется, резервное копирование, ручной доступ например при разрешении различных ошибок в программе и прочее.

p.s. советы:
* оформи диск с такими файлами как отдельную файловую систему, в отдельном контейнере (пусть и в файле но не обязательно) и при необходимости резервное копирование делать уже целым файлом раздела, это заметно быстрее не только для hdd (тут само собой) но и для ssd, когда у тебя миллионы файлов.
* если нет денег на ssd на весь объем данных, используй с помощью bcache малый ssd как кеширующий к hdd, или хотя бы выноси журнал (для ext4) отдельно, хотя бы запись не будет сильно тормозить
* если файлы мелкие (десятки килобайт), возможно key-value база данных будет более предпочтительна (но только если это не мешает, к примеру раздавать статику веб сервером лучше само собой из файлов)
* а можно даже сколхозить свое
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы