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