Задать вопрос
apiquestion
@apiquestion
Студент

Как хранить очень большое количество файлов? Как сохранять пути в БД?

У меня в проекте будет очень много картинок (аватары пользователей, постеры для фильмов, обложки для альбомов и т.д.).
Вопрос: как лучше сохранять картинки на сервере и как сохранять пути в БД?
Насколько мне известно, в одной папке можно хранить ограниченное количество файлов, иначе могут быть проблемы (вплоть до полной потери данных). Поэтому нужно создавать какое-то дерево папок и по ним разбрасывать файлы.
На данный момент я не придумал ничего лучше, как генерировать при загрузке файла GUID и, например, для 6F9619FF-8B86-D011-B42D-00CF4FC964FF хранить фото в папке 6F/6F96/6F9619FF-8B86-D011-B42D-00CF4FC964FF.jpg. В БД я планирую хранить только GUID, а загружаемый формат для картинок ограничу одним JPG. Сильно ли костыльно?
Какие еще варианты можно придумать?
  • Вопрос задан
  • 863 просмотра
Подписаться 3 Оценить 2 комментария
Ответ пользователя АртемЪ К ответам на вопрос (8)
Jump
@Jump
Системный администратор со стажем.
Насколько мне известно, в одной папке можно хранить ограниченное количество файлов, иначе могут быть проблемы (вплоть до полной потери данных).
У каждой файловой системы есть ограничения.
Например максимальный объем файла, или длина пути к файлу. Если вы их не превышаете - все нормально.
Если вы сгрузите все файлы в одну папку - ну вероятно вам будет просто неудобно с ними работать и их сортировать. Возможно некоторые файловые системы будут работать медленнее при большом количестве файлов в папке. Я с таким не сталкивался.
Сколько миллионов файлов у вас будет в одной папке?

На данный момент я не придумал ничего лучше, как генерировать при загрузке файла GUID и, например, для 6F9619FF-8B86-D011-B42D-00CF4FC964FF хранить фото в папке 6F/6F96/6F9619FF-8B86-D011-B42D-00CF4FC964FF.jpg
Правильно и грамотно придумали. Собственно так и делают - файл хэшируют, хэш используется как имя файла, по первым символам хэша идет разбивка на папки, если таковая нужна. Хотя это не единственный вариант, в зависимости от ситуации может быть более удобна другая разбивка.
Ответ написан
Комментировать