Назад | Перейти на главную страницу

Эффективная обработка 2+ миллионов файлов

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

2/2/6253
2/2/6252
...

Размер файла варьируется от 30 байт до 60 КБ. Вся БД доступна только для чтения. БД имеет размер около 125 гигабайт.

Добавлено: Все файлы сжаты zlib (python)

Я хочу обрабатывать все это как один файл с файловой системой в нем. Какую файловую систему мне лучше всего выбрать?

На данный момент я использую следующий скрипт:

dd if=/dev/zero of=/my_file.iso bs=1024K count=60000
mkfs.ext4 -f /my_file.iso
mount -o loop /my_file.iso /mnt/

Вероятно, вы просто хотите использовать XFS.

Он вполне способен на то, о чем вы просите, и выполняет свою работу.

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

Посмотри пожалуйста: Как количество подкаталогов влияет на производительность чтения / записи дисков в Linux? и Влияние высокого соотношения каталогов и файлов на XFS

Если вам нужно что-то более эзотерическое, ZFS zvols с файловой системой наверху может предоставить интересную альтернативу (для сжатия, целостности и переносимости).

Посмотреть здесь: Прозрачная файловая система сжатия в сочетании с ext4

Видя количество маленьких файлов, я бы подумал об использовании SquashFS. Особенно, если у вас достаточно мощный процессор (имеется в виду отсутствие Pentium III или ARM с тактовой частотой 1 ГГц).

В зависимости от типа хранимых данных SquashFS может значительно уменьшить их размер и, следовательно, объем операций ввода-вывода при чтении. Единственным недостатком является загрузка ЦП при чтении. С другой стороны, любой современный процессор может распаковывать со скоростью, намного превосходящей производительность HDD и, возможно, даже SSD.

Еще одно преимущество - вы экономите место / трафик и / или время, потраченное на распаковку после передачи.

Некоторые тесты сравнивая его с ISO и другими подобными средствами. Как и в случае с любым другим тестом, относитесь к нему с недоверием, а лучше - подделайте собственный. ;-)

Изменить: в зависимости от обстоятельств (и я не смею здесь догадываться) SquashFS без сжатия (mksquashfs -noD) может превзойти ext4, так как код для чтения должен быть намного проще и оптимизирован для работы только для чтения. Но это действительно ваше дело для тестирования в вашем случае использования. Еще одним преимуществом является то, что образ SquashFS немного больше ваших данных. С Ext4 вы всегда должны создавать более крупные петлевые устройства. Минус, конечно, в том, что это довольно неудобно, когда нужно изменить данные. С ext4 это намного проще.

Если он доступен только для чтения, почему бы не использовать файл ISO? Ты можешь использовать genisoimage или mkisofs.

Если вы хотите сжать все это, вы также можете использовать squashfs, еще одна файловая система, доступная только для чтения, с очень высокой степенью сжатия.

Я не уверен, соответствует ли это вашей цели, но вы учли tar объединить несколько файлов? Это может снизить требования к давлению и пространству в файловой системе, и ваше приложение базы данных может читать данные для определенного файла с одним из множества tar библиотеки вокруг.

В зависимости от вашего шаблона доступа это может даже повысить производительность.