Необходимо рассмотреть XFS. Это поддерживает очень большое количество файлов и в файловой системе и на уровне каталога, и производительность остается относительно согласовывающейся даже с большим количеством записей из-за B + древовидные структуры данных.
Существует страница на их Wiki к большому количеству бумаг и публикаций, которые детализируют дизайн. Я рекомендую, чтобы Вы дали ему попытку и сравнили его с Вашим текущим решением.
Много файлов в каталоге на ext3 были обсуждены в длине на родственном сайте stackoverflow.com
По-моему, 60 000 файлов в одном каталоге на ext3 далеки от идеала, но в зависимости от Ваших других требований это могло бы быть достаточно хорошо.
Хорошо. Я сделал некоторое предварительное использование тестирования ReiserFS, XFS, JFS, Ext3 (dir_hash включил), и Ext4dev (2.6.26 ядер). Мое первое впечатление было то, что все были достаточно быстры (на моей раскормленной рабочей станции) - оказывается, что удаленная производственная машина имеет довольно медленный процессор.
Я испытал некоторую странность с ReiserFS даже на начальной букве, тестирующей так исключил это. Кажется, что JFS имеет на 33% меньше требования ЦП, чем все другие и так проверит это на удаленном сервере. Если это будет работать достаточно хорошо, то я буду использовать это.
Используя tune2fs для включения dir_index мог бы помочь. Чтобы видеть, включено ли это:
sudo tune2fs -l /dev/sda1 | grep dir_index
Если это не включено:
sudo umount /dev/sda1
sudo tune2fs -O dir_index /dev/sad1
sudo e2fsck -D /dev/sda1
sudo mount /dev/sda1
Но у меня есть чувство, что Вы могли бы спускаться по неправильному пути..., почему бы не генерировать плоский индекс и использовать некоторый код для выбора случайным образом на основе этого. Можно затем использовать подкаталоги для более оптимизированной древовидной структуры.
ext3 и ниже поддержки до 32 768 файлов на каталог. ext4 поддерживает до 65 536 в фактическом количестве файлов, но позволит Вам иметь больше (это просто не сохранит их в каталоге, который не имеет значения в большинстве пользовательских целей).
Кроме того, способ, которым каталоги хранятся на расширении* файловые системы, по существу как один большой список. В более современных файловых системах (Reiser, XFS, JFS) они хранятся как B-деревья, которые намного более эффективны для больших наборов.
Вы не хотите переполнять это много файлов в одном каталоге, Вы хотите своего рода структуру. Даже если это - что-то столь же простое как haveing подкаталоги, которые запускаются с первого символа файла, может улучшить Ваши времена доступа. Другой глупый прием, который мне нравится использовать, должен вынудить систему обновить, это - кэш с метаинформацией, должен регулярно выполнять updatedb. В одном окне выполненный slabtop, и в другом выполнении updatedb и Вы будете видеть, что много памяти собирается быть выделенным кэшированию. Это намного быстрее этот путь.
Файловая система является, вероятно, не идеальным устройством хранения данных для такого требования. Некоторое устройство хранения данных базы данных лучше. Все еще, если Вы наклоняетесь, помогают ему, затем пытаются разделить файлы в нескольких каталогах и используют unionfs для монтирования (связывают) те каталоги на единственном каталоге, где Вы хотите, чтобы все файлы появились. Я не использовал эту технику для, убыстряются вообще, но это стоящий попытки.
Я пишу приложение, которое также хранит партии и много файлов, хотя мои больше, и у меня есть 10 миллионов из них, что я буду разделять через несколько каталогов.
ext3 является медленным главным образом из-за реализации "связанного списка" по умолчанию. Таким образом, если у Вас есть много файлов в одном каталоге, это означает открываться, или создать другого собирается стать медленнее и медленнее. Существует что-то позвонившее, которое три индексируют, который доступен для ext3, который по сообщениям улучшает вещи значительно. Но, это только доступно на создании файловой системы. Посмотрите здесь: http://lonesysadmin.net/2007/08/17/use-dir_index-for-your-new-ext3-filesystems/
Так как Вы оказываетесь перед необходимостью восстанавливать файловую систему так или иначе и из-за ext3 ограничений, моя рекомендация состоит в том, что Вы смотрите на использование ext4 (или XFS). Я думаю, что ext4 немного быстрее с меньшими файлами и имеет более быстрый, восстанавливает. Индекс Htree является значением по умолчанию на ext4 насколько я знаю. У меня действительно нет опыта с JFS или Reiser, но я услышал, что люди рекомендуют это прежде.
В действительности я, вероятно, протестировал бы несколько файловых систем. Почему бы не попробовать ext4, xfs и jfs и видеть который, дает лучшую общую производительность?
Что-то, что разработчик сказал мне, это может убыстриться, вещи в коде приложения не должен делать, "статистика + открывает" call but rather, "открытый + fstat". Первое значительно медленнее, чем второе. Не уверенный, если Вы имеете какой-либо контроль или влияние на это.
См. мое сообщение здесь на stackoverflow. При хранении и доступе к 10 миллионам файлов в Linux существуют некоторые очень полезные ответы и ссылки там.
Автор этой статьи исследует некоторые проблемы производительности файловых систем с большим количеством файлов и делает несколько хороших сравнений производительности различных файловых систем ext3 , ext4 и XFS. Это доступно в виде слайд-шоу. http://events.linuxfoundation.org/slides/2010/linuxcon2010_wheeler.pdf
BTRFS было бы очень практично. Проблема здесь, похоже, в маленьких файлах. NVME и SSD имеют блоки по 4 КБ и более чем подходят для файлов такого размера и очень быстрого доступа к небольшим файлам. 30 КБ * 60000 файлов — это всего 1,7 ГБ в среднем, это даже не в терабайтном масштабе. Поэтому я рекомендую использовать ramdisk с UPS и синхронизировать его с nvme каждые 10 секунд с помощью rsync. Он синхронизирует только измененные файлы. Сохраняйте 100 версий или около того для перебалансировки после перезапуска. Синхронизация с отдельной резервной копией каждые 1 час.
Помните, что BTRFS занимает много места (%70) при работе с маленькими файлами, но вам не о чем беспокоиться.
Обратите внимание, что я написал это без детальной проверки первого ответа с графиками. После проверки это подтверждает мою логику.