Какова “стоимость” глубоко вложенных папок в ext4?

Дополнительное преимущество оконечных мультиплексоров - то, что Ваши сессии мультиплексора все еще будут живы, и можно снова соединиться с ними, даже если X (настольная сессия) катастрофические отказы, или Вы вышли X.

6
04.06.2013, 15:39
2 ответа

Каждая папка использует один inode (256 байтов) и по крайней мере один блок (вероятно, 4 096 байтов). Большей проблемой может быть время доступа по нескольким слоям иерархии.

Проблема производительности происходит, вероятно, не из-за размера папки, но к расширению пути. Расширение пути имеет две проблемы:

  1. Это сортирует результаты (который не может быть отключен), который волнующе занимает много времени для огромных количеств объектов.
  2. Это создает (в зависимости от вида использования) строки запрещенной команды (слишком много объектов).

Необходимо обратиться к этому на прикладном уровне. Считайте 100 имен файлов за один раз (неотсортированный, с find или ls -U) и вид эти небольшие группы при необходимости. Это также допускает параллельное чтение из использование ЦП и диска.

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

6
27.01.2020, 20:23
  • 1
    . Я играл вокруг с с находкой и du, и вывод фильтрации на файлах по сравнению с общим размером согласовывается с потреблением, которое Вы заявили. Я доволен выполнением текущей вложенной установки, но я столкнусь с полными ограничениями быстрее, чем я думал. Так, к сожалению, я должен бросить простой дизайн. –  Martin 04.06.2013, 16:10

Покровы Ext4 немного лучше в больших каталогах, чем предыдущие версии, но все еще срывают приблизительно после 10,000 файлов в том же каталоге. Выделение файлов в иерархии каталогов несколько уровней глубоко является общим решением для поддержания производительности. Каждый инкремент глубины требует дополнительной косвенности при поиске файла, но ширина увеличивается экспоненциально с глубиной.

Например, если Ваши файлы имеют имена, состоящие только из букв, цифр и нескольких знаков пунктуации, вместо того, чтобы поместить их всех в тот же каталог, создают подкаталоги на основе первых двух символов имени файла. Таким образом, файл foobar хранится в fo/foobar. Если Вы все еще имеете слишком много файлов в подкаталогах, увеличиваете глубину: fo/ob/foobar, и так далее. Необходимо будет сделать сравнительные тесты для выяснения сколько символов для разделения после и в какой глубина остановиться.

Существует много потенциальных каталогов, и большинство закончится пустое. Так вместо того, чтобы создать все каталоги вначале, создайте их по требованию. Например, если необходимо создать файл foobar, затем создайте каталог fo если это уже не существует, то сделайте то же для fo/ba, и затем хранилище foobar в fo/ba/foobar.

Если файлы не будут крошечными (меньше чем 4 КБ), каталоги представят незначительную сумму пространства. Даже с крошечными файлами, пока Вы не переусердствовали глубину, будет гораздо меньше каталогов, чем файлы. Однако, если у Вас есть огромное количество крошечных файлов, это - знак, необходимо использовать базу данных вместо этого.

7
27.01.2020, 20:23
  • 1
    У Вас есть цитата для 10k производительности размера каталога? Я ищу такой тест производительности. –  John Franklin 19.03.2016, 22:40
  • 2
    @JohnFranklin Просто личный опыт. Замедление постепенно, не берите это в качестве точного числа, просто порядок величины. –  Gilles 'SO- stop being evil' 19.03.2016, 22:46

Теги

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