xolnimda
@xolnimda

Какую структуру папок выбрать для файлов с привязкой к пользователям?

Вся структура папок строится на основе id пользователя.
т.е. берем id пользователя и вычисляем по его id адрес папки.
Таким образом получилась примерно вот такая вот структура ветвления

e4a69d525a494f83bffaa6b391fc3f80.png

В одной папке может храниться не более 100 папок.
Получается примерно такой адрес папки пользователя:

1/1/1/1/1/

Дальше высчитываем md5 из id файла и создаем в папке пользователя структуру по md5
Допустим md5 id файла b4k7nbsdgjh45b45mbjdfbgser, тогда структура будет такой

b4k/7nb/sdg/jh45b45mbjdfbgser

И конечный адрес до файла получаем

1/1/1/1/1/b4k/7nb/sdg/jh45b45mbjdfbgser

Я посмотрел что на хабре файлы хранятся таким же образом
https://habrastorage.org/files/e4a/69d/525/e4a69d5...
Но у них нет пользователей, хотя может они прописывают в базе какому пользователю принадлежит файл, но это не столь важно.

Мой портал подразумевает огромное количество файлов, что со временем будет требовать распределение файлов по серверам.
Так же я знаю что на сервере есть ограничение на количество файлов и папок.

Правильно ли я построил структуру хранения?
  • Вопрос задан
  • 2748 просмотров
Пригласить эксперта
Ответы на вопрос 1
@RPG
В вашем случае я бы ещё посмотрел в сторону баз данных.

Слишком много папок тоже плохо - чем больше вложенность, тем больше будет оверхэд по инодам. Всё зависит от файловой системы и от того, что вы понимаете под "очень много". По опыту скажу, что ext4 с множеством метаданных справляется быстрее остальных и скорее всего подойдёт для такой задачи, XFS наоборот хороша для хранения очень больших файлов - баз данных, например.

Есть ещё новая ФС - btrfs, она умеет держать метаданные для большой файловой системы на SSD дисках, а данные - на более медленных. Для больших хранилищ самое то.

Далее уже просто экспериментально можно проверить, что будет быстрее - большая вложенность или множество файлов в одной папке. Судя по структуре хранилища хабра наиболее оптимальным считается 4096 элементов на каталог.

events.linuxfoundation.org/slides/2010/linuxcon201...

См. также Какое максимально число папок можно создавать в папке?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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