@savage_me

Какую файловую систему и с каким настройками лучше использовать для очень большого количества маленьких файлов?

На диске сервера ожидается всего 60кк файликов. 15кк папок.

Структура: 4к папок, в каждой примерно по 3750 папок, в каждой по 4 файлика.

Файлики изначально по 15-20 байт. С течением времени будут расти по 0.6 килобайта в месяц на протяжении примерно 30 месяцев - диск на 1 терабайт.

Тестировал на данный момент xfs и ext3 - то что сейчас стояло на сервере на двух дисках.

ext3 - размер блока 4кб, диск намного более загружен данными.
xfs - размер блока 2кб

По скорости записи:
ext3 за 5 часов 20 минут - ~18.400.000 созданных файлов и папок.
xfs за 5 часов 20 минут - ~14.200.000 созданных файлов и папок.

Чем больше данных записано, тем быстрее падает скорость записи. Для xfs этот момент существенно хуже ext3, хотя и ext3 тоже очень не хорошо себя ведет.

По скорости первого чтения 50к папок с помощью php функий opendir и readdir:
ext3 - ~800 секунд
xfs - ~1200 секунд

По скорости чтения тех же 50к папок второй и последующие разы:
ext3 - 5секунд
xfs - 47 секунд

Но это только 50к папок. Если будут 15кк папок - то при ext3 полное первое считывание всех папок будет примерно за 66 часов. Надо за ~12. И боюсь, что повторное чтение не будет таким же быстрым, как в случае с 50к папками, потому что столько данных не будут хранится в кэше (или где они хранятся?) постоянно в полном объеме (или будут?). Даже если повторное и последующие считывания будут происходить уже очень быстро, то в случае ребута сервера опять надо 66 часов тратить на первое считывание. Так не подходит.

ext4 будет работать еще шустрее ext3 как я понимаю. Но врядли справится прочитать первоначально все 15кк папок за ~12 часов с помощью php функций opendir и readdir.

Как быть, может что-то посоветуете? ext4 намного шустрее по записи/ЧТЕНИЮ, чем ext3?
Какую файловую систему поставить протестировать, с каким настройками? Может есть другие варианты решения проблемы медленного чтения?
  • Вопрос задан
  • 1136 просмотров
Решения вопроса 1
opium
@opium
Просто люблю качественно работать
мучался и тестировал на всех доступных фс, кроме рейзера так как он умер
пришлось остановиться на ext4 особо альтернатив нет для мелких файлов, хоть в базу их пихай, но в случае если вы их дописываете это не особо подойдет
так же рекомендую уменьшить и сделать три уровня папок вместо двух
так же структуру можно хранить в бд и не опрашивать папки на наличие в них других папок , то есть обращаться напрямую в файлы

по форматированию и монтированию использую сейчас что то типо такого
mkfs -t ext4 -m 0 -O dir_index,filetype /dev/vg0/lv0
tune2fs -o journal_data_writeback /dev/vg0/lv0
noatime,nodiratime,noacl,data=writeback,commit=15

производительность все равно оставляет желать лучшего, хочется просто самому сесть и написать базу данных для мелких файлов с офигенной производительностью
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
theurs
@theurs
ext4 конечно лучше. параметры форматирования -T small для мелких файлов
reiserfs еще можно попробовать

тестировать можно на виртуальных дисках размещенных в файлах (в одном и том же файле что бы исключить влияние фрагментации)

dd if=/dev/zero of=/home/user/ext4test.img bs=1M count=10000
mkfs.ext4 -T small /home/user/ext4test.img
mkdir /mnt/ext4test
mount /home/user/ext4test.img /mnt/ext4test

test
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы