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

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

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

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

Файл a варьируется от 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/

решение1

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

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

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

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

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

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

решение2

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

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

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

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

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

решение3

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

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

решение4

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

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

Связанный контент