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