Сценарий
Пользователи могут публиковать элемент и включать до 5 изображений с сообщением, каждое загружаемое изображение необходимо передискретизировать и изменить размер - создано всего 4 дополнительных изображения. Значение, если пользователь загружает 5 изображений, заканчивается 25 фотографиями для хранения.
Предположения
- Изображения были правильно отмечены, и они являются действительными файлами изображений
- Система должна масштабироваться (допустим 1000 сообщений в первом экземпляре, поэтому максимально 5000 изображений)
- Каждое изображение переименовывается в отношении идентификатора auto_incremenet записи сообщения db и включает соответствующий суффикс, т.е. 12345_1_1.jpg 12345_2_1.jpg - поэтому нет проблем с дубликатами.
- Изображения не чувствительны, поэтому нет проблем с их непосредственным доступом (хотя список каталогов будет отключен)
Возможные подходы
- Учитывая, что идентификаторы уникальны, мы могли бы просто поместить их в одну папку (неэффективно после определенной точки).
- Можно создать папку для каждого сообщения и поместить в нее все изображения, поэтому ROOT/images/12345 (опять же, получится с множеством папок).
- Может делать хранилище изображений на основе даты, то есть каждый день создается новая папка, а изображения дней хранятся там.
- Можно сохранить изображения на основе измененного размера, т.е. все исходные файлы могут быть сохранены в одной папке images/orig все миниатюры в изображениях /thumb (я думаю, что Gumtree использует такой подход).
- Может создать X количество файлов, которые будут сохранены в одной папке перед созданием другого.
У кого-нибудь есть опыт в отношении лучших практик/подходов при масштабировании изображений?
Примечание. Я предполагаю, что кто-то упомянет S3 - предположим, что мы хотим сохранить изображения локально на данный момент.
Спасибо, что посмотрели