Большое количество файловой системы файлов в единственном каталоге

Попытайтесь установить свои интерфейсы на скорость вручную, и избегать использования автосогласовывают, если это возможно.

29
задан 22 August 2012 в 20:05
12 ответов

Необходимо рассмотреть XFS. Это поддерживает очень большое количество файлов и в файловой системе и на уровне каталога, и производительность остается относительно согласовывающейся даже с большим количеством записей из-за B + древовидные структуры данных.

Существует страница на их Wiki к большому количеству бумаг и публикаций, которые детализируют дизайн. Я рекомендую, чтобы Вы дали ему попытку и сравнили его с Вашим текущим решением.

15
ответ дан 28 November 2019 в 20:00

Много файлов в каталоге на ext3 были обсуждены в длине на родственном сайте stackoverflow.com

По-моему, 60 000 файлов в одном каталоге на ext3 далеки от идеала, но в зависимости от Ваших других требований это могло бы быть достаточно хорошо.

8
ответ дан 28 November 2019 в 20:00

Хорошо. Я сделал некоторое предварительное использование тестирования ReiserFS, XFS, JFS, Ext3 (dir_hash включил), и Ext4dev (2.6.26 ядер). Мое первое впечатление было то, что все были достаточно быстры (на моей раскормленной рабочей станции) - оказывается, что удаленная производственная машина имеет довольно медленный процессор.

Я испытал некоторую странность с ReiserFS даже на начальной букве, тестирующей так исключил это. Кажется, что JFS имеет на 33% меньше требования ЦП, чем все другие и так проверит это на удаленном сервере. Если это будет работать достаточно хорошо, то я буду использовать это.

5
ответ дан 28 November 2019 в 20:00

Используя 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

Но у меня есть чувство, что Вы могли бы спускаться по неправильному пути..., почему бы не генерировать плоский индекс и использовать некоторый код для выбора случайным образом на основе этого. Можно затем использовать подкаталоги для более оптимизированной древовидной структуры.

3
ответ дан 28 November 2019 в 20:00

ext3 и ниже поддержки до 32 768 файлов на каталог. ext4 поддерживает до 65 536 в фактическом количестве файлов, но позволит Вам иметь больше (это просто не сохранит их в каталоге, который не имеет значения в большинстве пользовательских целей).

Кроме того, способ, которым каталоги хранятся на расширении* файловые системы, по существу как один большой список. В более современных файловых системах (Reiser, XFS, JFS) они хранятся как B-деревья, которые намного более эффективны для больших наборов.

2
ответ дан 28 November 2019 в 20:00
  • 1
    поддержка того количества файлов в dir не является тем же самым как выполнением его на разумной скорости. я don' t знают все же, является ли ext4 немного лучше, но ext3 замедляется значительно, когда он имеет больше чем несколько тысяч файлов в каталоге, даже с включенным dir_index (он помогает, но doesn' t устраняют проблему полностью). –  cas 21 July 2009 в 00:50

Можно хранить файл inodes вместо имен файлов: доступ inode числа должен быть намного быстрее то разрешение имена файлов

1
ответ дан 28 November 2019 в 20:00

Вы не хотите переполнять это много файлов в одном каталоге, Вы хотите своего рода структуру. Даже если это - что-то столь же простое как haveing подкаталоги, которые запускаются с первого символа файла, может улучшить Ваши времена доступа. Другой глупый прием, который мне нравится использовать, должен вынудить систему обновить, это - кэш с метаинформацией, должен регулярно выполнять updatedb. В одном окне выполненный slabtop, и в другом выполнении updatedb и Вы будете видеть, что много памяти собирается быть выделенным кэшированию. Это намного быстрее этот путь.

0
ответ дан 28 November 2019 в 20:00

Вы не указывали вид данных в этих файлах. Но от звуков его, необходимо использовать своего рода базу данных с индексацией для быстрых поисков.

-1
ответ дан 28 November 2019 в 20:00

Файловая система является, вероятно, не идеальным устройством хранения данных для такого требования. Некоторое устройство хранения данных базы данных лучше. Все еще, если Вы наклоняетесь, помогают ему, затем пытаются разделить файлы в нескольких каталогах и используют unionfs для монтирования (связывают) те каталоги на единственном каталоге, где Вы хотите, чтобы все файлы появились. Я не использовал эту технику для, убыстряются вообще, но это стоящий попытки.

-1
ответ дан 28 November 2019 в 20:00

Я пишу приложение, которое также хранит партии и много файлов, хотя мои больше, и у меня есть 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 существуют некоторые очень полезные ответы и ссылки там.

5
ответ дан 28 November 2019 в 20:00

Один миллиард файлов в Linux

Автор этой статьи исследует некоторые проблемы производительности файловых систем с большим количеством файлов и делает несколько хороших сравнений производительности различных файловых систем ext3 , ext4 и XFS. Это доступно в виде слайд-шоу. http://events.linuxfoundation.org/slides/2010/linuxcon2010_wheeler.pdf

time to run mkfs time to create 1M 50kb files File system repair time removing 1m files

13
ответ дан 28 November 2019 в 20:00

BTRFS было бы очень практично. Проблема здесь, похоже, в маленьких файлах. NVME и SSD имеют блоки по 4 КБ и более чем подходят для файлов такого размера и очень быстрого доступа к небольшим файлам. 30 КБ * 60000 файлов — это всего 1,7 ГБ в среднем, это даже не в терабайтном масштабе. Поэтому я рекомендую использовать ramdisk с UPS и синхронизировать его с nvme каждые 10 секунд с помощью rsync. Он синхронизирует только измененные файлы. Сохраняйте 100 версий или около того для перебалансировки после перезапуска. Синхронизация с отдельной резервной копией каждые 1 час.

Помните, что BTRFS занимает много места (%70) при работе с маленькими файлами, но вам не о чем беспокоиться.

Обратите внимание, что я написал это без детальной проверки первого ответа с графиками. После проверки это подтверждает мою логику.

0
ответ дан 16 August 2021 в 09:36

Теги

Похожие вопросы