Эффективная обработка более 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/

4 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам