Файловая система ищет производительность с большим количеством крошечных файлов

StackOverflow https://stackoverflow.com/questions/432603

Вопрос

Я собираюсь создать сервер с множеством крошечных файлов, предоставляемых XML API. Он не будет выполнять много итераций по каталогам или блокам последовательных файлов - мы много и много говорим о прерывистых данных.

Будет ли время поиска в BSD UFS ухудшаться со временем для запросов отдельных файлов? Я понимаю, что ограничение inode в файловой системе зависит от размера раздела / фрагмента, но жесткий диск должен пройти по таблице inode для каждого запроса файла, прежде чем он сможет обнаружить местоположение данных. Какая файловая система обеспечивает лучшую производительность для времени поиска?

Альтернативой является установка 2-4 ГБ "blob". файлы и имеют отдельную систему поиска файла, содержащегося в них из программного обеспечения. «Таблица inode» программного обеспечения может быть оптимизирован для доставки в зависимости от текущего пользователя, вошедшего в систему, и т. д. Эти " таблицы inode " вероятно, будет кэшироваться в ОЗУ и будет относиться только к тем пользователям, которые в данный момент вошли в систему, так что будет меньше затраченных ресурсов.

Где эти два решения оцениваются с точки зрения масштабируемости и обслуживания? Какого увеличения производительности можно ожидать, если использовать второе решение?

Это было полезно?

Решение

Наиболее очевидный и проверенный временем метод смягчения - это использовать хороший иерархический дизайн для каталогов (и стратегий поиска путей) и иметь больше каталогов с меньшим количеством файлов в каждом.

Другие советы

Для последних версий FreeBSD с dirhash и программными обновлениями, которые я видел нет проблем с несколькими десятками тысяч файлов в каталоге. Вы, вероятно, не хотите идти к северу от 500.000 файлов или около того. Например. удаление каталога с 2.500.000 файлов заняло у меня три дня.

Я не уверен, что правильно понимаю ваш вопрос, но если вы хотите искать по большому количеству файлов, почему бы не использовать разделенную таблицу mysql, расположенную в файловой системе RAID0 или VFS?

Редактировать: насколько я знаю, большое количество файлов в одной папке будет ухудшать скорость любой ФС, поскольку она должна поддерживать большие списки файлов, разрешений и имен, база данных предназначена для хранения списков данных в памяти и искать в них очень оптимизированным способом.

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

Другой вариант, если ваши объекты должны или могут быть доступны через HTTP, это использовать лак Кеш перед небольшим веб-сервером. Первоначально объекты будут храниться на диске, но лак будет хранить и обслуживать объекты из памяти после первого доступа к данному объекту.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top