Хранение и доступ к 10 миллионам файлов в Linux - PullRequest
29 голосов
/ 16 февраля 2011

Я пишу приложение, которое должно хранить множество файлов размером примерно до 10 миллионов.

В настоящее время они названы с UUID и будут иметь размер около 4 МБ каждый, но всегда одинакового размера.Чтение и запись из / в эти файлы всегда будут последовательными.

2 основных вопроса, на которые я ищу ответы:

1) Какая файловая система будет для этого наилучшей.XFS или ext4?2) Нужно ли хранить файлы под подкаталогами, чтобы уменьшить количество файлов в одном каталоге?

В ответ на вопрос 2 я отмечаю, что люди пытались обнаружить ограничение XFS для количества файловВы можете хранить в одном каталоге и не нашли предела, который превышает миллионы.Они не отметили проблем с производительностью.А как насчет ext4?

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

Каковы пределы ext4 и XFS?Какие преимущества в производительности есть от одного над другим, и можете ли вы увидеть причину использовать ext4 над XFS в моем случае?

Ответы [ 2 ]

19 голосов
/ 16 февраля 2011

Вам определенно следует хранить файлы в подкаталогах.

EXT4 и XFS используют эффективные методы поиска для имен файлов, но если вам когда-либо понадобится запускать инструменты над каталогами, такими как ls или findвы будете очень рады иметь файлы в управляемых блоках по 1000 - 10000 файлов.

Номер индекса должен улучшить производительность последовательного доступа к файловым системам EXT.Метаданные хранятся в inode, и если вы обращаетесь к этим inode не по порядку, доступ к метаданным будет рандомизированным.Читая ваши файлы в порядке следования узлов, вы также получаете последовательный доступ к метаданным.

10 голосов
/ 17 февраля 2011

Современные файловые системы позволят вам хранить 10 миллионов файлов в одном каталоге, если хотите.Но инструменты (ls и его друзья) не будут работать хорошо.

Я бы порекомендовал поместить один уровень каталогов, фиксированное число, возможно, 1000 каталогов, и поместить туда файлы (10 000 файлов терпимы кshell и "ls").

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

10M файлы не должныЭто действительно проблема, если вам не нужно выполнять массовые операции с ними.

Я ожидаю, что вам нужно будет удалить старые файлы, но что-то вроде "tmpwatch", вероятно, будет отлично работать с файлами 10M.

...