У нас есть 3 папки на машине Ubuntu 14.04, каждая из которых содержит 250К изображений размером от 2КБ до 30КБ в каждой папке, и ожидается, что их размер увеличится до 1M файлов на каталог.
Пытаясь масштабировать приложение на несколько серверов, мы ищем Glusterfs для общего хранилища. Поскольку файлы размером 250K не являются проблемой для ext4, это кажется проблематичным для glusterfs. При попытке скопировать файлы машина полностью вылетает.
Я хочу разделить файлы на каталоги на 2 уровня:
mkdir -p {000..255} / {000..255}
/000/000/filename
/001/000/filename
/001/001/filename
...
Это звучит как хороший разумный способ? Позже вся структура будет содержать миллионы файлов. Может ли это позволить glusterfs быть надежным в продакшене с хорошей производительностью и размещать миллионы файлов?
Использование GlusterFS для хранения и доступа к большому количеству очень маленьких файлов представляет собой сложность, с которой сталкиваются многие реализации, и кажется, что вы уже на правильном пути решения проблемы: разбиение файлов на отдельные каталоги.
Вы можете реализовать подобное решение. Просто создайте группу каталогов, выберите ограничение на количество файлов, которые могут быть помещены в каждый каталог, и надейтесь, что у вас не закончится место для размещения файлов. В вашем примере вы создаете более 65 тысяч каталогов, поэтому в ближайшее время это вряд ли станет проблемой.
Другой вариант - создавать каталоги на основе даты создания файла. Например, если файл cust_logo_xad.png
был создан сегодня, он будет храниться здесь:
/gluster/files/2015/08/24/cust_logo_xad.png
Если вы размещаете данные для разных сущностей (клиентов, отделов и т. Д.), Вы можете разделять файлы в зависимости от владения, присвоив сущности какой-то уникальный идентификатор. Например:
/gluster/files/ry/ry7eg4k/cust_logo_xad.png
Кроме того, было бы неплохо взглянуть на Документация GlusterFS для настройки кластера хранения для размещения небольших файлов. По крайней мере, убедитесь, что:
mkfs
вариант)Если вы можете (а если вы еще этого не сделали), рекомендуется создать базу данных, которая будет служить индексом для файлов, а не сканировать (например, ls
) или поиск (например, find
) для файлов все время.