Я управляю приложением, которое содержит хранилище файлов, в котором хранятся все файлы с именами файлов, равными их суммам md5. Все файлы хранятся в одном каталоге. В настоящее время существуют тысячи, но скоро их должно быть на сервере миллионы файлов. Текущий сервер работает под управлением Ubuntu 11.10 в файловой системе ext4.
Кто-то сказал мне, что не стоит размещать много файлов в каталоге, так как это приведет к значительному увеличению времени поиска и надежности (у него была история о максимальном количестве файлов, на которую может указывать один каталог, что приводило к большому связанному списку). Вместо этого он предложил создать подкаталоги, например, с подстроками имени файла. Тем не менее, это сделает некоторые вещи в моем приложении гораздо более громоздкими.
Это все еще правда, или у современных файловых систем (например, ext4) есть более эффективные способы справиться с этим и естественно масштабировать? В Википедии есть некоторые подробности о файловых системах, но на самом деле ничего не говорится о максимальном количестве файлов в каталоге или времени поиска.
источник
Современные файловые системы очень хорошо справляются с очень большими каталогами, даже с миллионами файлов. Но обычных инструментов нет. Например, перечисление такого большого каталога с помощью «ls» займет довольно много времени, так как обычно он читает весь каталог и сортирует его (хотя вы можете использовать ls -f, чтобы избежать сортировки). Он не начнет показывать файлы, пока все не будет прочитано. Разделение имен помогает в некоторых случаях, но не во всех (например, для репликации rsync может потребоваться собрать все дерево имен).
источник
Могу ли я предложить вместо этого использовать базу данных SQL? Это, вероятно, превратит эту слабость в вашем приложении в силу.
источник