Павел
И сколько проектов без s3 нормально живет? навалом
Pavel
Потому что это опять же опыт использования технологий, который релевантен на рынке
Pavel
И сколько проектов без s3 нормально живет? навалом
В моем понимании "интернет-магазин" это очень много медиа файлов. Фото товаров в разных скейлах, аттачи в комментариях и саппорте, постеры/баннеры и прочая хрень.
Да это можно все хранить локально, но зачем нагружать диск тачки которая и без кого занята приложением?
Apxat
да очень малому числу интернет магазинов нужен s3 на самом деле, в большинстве своем за глаза хватит локального хранения
Павел
Павел
А если у нас локальный магазин памперсов - такого трафика там и не будет никогда
Юра
Павел
Denchik
так мужики спасибо за советы) но если без дополнительных сервисов, вот есть у меня локально 30 гб и этого пока что хватит, вот как мне организовать хранение допустим возьмем конкретно - картинки товаров?)
Юра
Просто сохраняешь туда файлы
Юра
) в чем вопрос тогда
Юра
Маунтишь этот вольюм в симфу и в нгинкс
Юра
Настраиваешь домен отдельный в нгинксе
Юра
И в КФ его
Павел
Но например у вас может быть такое, что еще продукта нет, а уже загружаете какие то файлы.
Тогда /images/products/{productId}/{uuid}.jpg не получится (точнее варианты есть, но уже более мудрено).
Павел
Если брать опять же массштабирование, но это вообще прям заморочки, можно в пути придумывать шарды путей, чтобы потом не было, что в 1 папке лежат миллионы папок или товаров. Но уже прям реально для большого и для локального, так как вроде начинает диск тупить если много файлов в 1 папке
Павел
Так что имхо, начните с простого (/images/products/{productId}/{uuid}.jpg) + локальное хранение + либа для абстракции или как по доке примеры. Может на symfony cast есть что.
Denchik
Понял, пойду пробовать мастерить что нибудь)
Apxat
мы храним так берем хеш файла, создаем папку 2 символа хеша, 2 символа хеша и кладем сам файл, и отдаем файлы напрямую через nginx
Apxat
c759c17df2bff098472c762cd1d133f7
files/images/с7/59/c759c17df2bff098472c762cd1d133f7
The Ant
Apxat
это отдельно храним в таблице
Михаил
Понял, пойду пробовать мастерить что нибудь)
да не надо придумывать что-то. Ну вот придумаешь, а другим потом это поддерживать. Небольшое s3 хранилище орендавал и поехали. Или miniio и когда вырастишь переехай в облако.
Вы же не пишете собственные яп и не конструируете свои субд. Вот и пользуйтесь готовым
Apxat
нет никаких проблем с тем чтобы работать с файлами локально
Apxat
в 99% проектах так и будет
Михаил
c759c17df2bff098472c762cd1d133f7
files/images/с7/59/c759c17df2bff098472c762cd1d133f7
ещё кстати хорошей практикой (в зависимости для чего вы это делаете конечно) будет зашивать куда-то размеры и усреднённый цвет картинки
Или где-то в респонсе с апи, или в query или в самом пути. Допустим
files/images/с7/59/128:64:0394fc:x37447tc.jpeg
или
files/images/с7/59/x37447tc.jpeg?x=128&y=64&c=x37447tc
или
{"i":"files/images/с7/59/x37447tc.jpeg","x":128,"y":64,"c":"x37447tc"}
тогда фронтенд ещё до запроса на сервер сможет скорректировать контент, особенно если загрузка ленивая (допустим статьи на сайте)
Юра
Можно ещё посмотреть на это https://github.com/liip/LiipImagineBundle
Юра
Само хендлит все
Юра
В сочетании с https://github.com/dustin10/VichUploaderBundle покроет думаю все требования для автора вопроса
Юра
Vich разрулит сохранение куда нужно, а liip на ходу обработает картинку и вернёт нужный рамзер, сохранив результат в кеш
Юра
Думаю liip не будет работать с S3, но автору вроде и не нужно
Павел
The Ant
Зашивать шард в урл или куда-либо ещё говно идея. Смена шарда или его удаления повлечет за собой ворох проблем.
Павел
Павел
Тоже самое например симфа делает в кэше
Павел
Чтобы не делать одну папку помойку, так как при каком то объеме начинается проблемы с чтением
Павел
Но это актуально для локалки, для s3 пофиг наверное
Михаил
папка 😂
Павел
The Ant
Ну рекомендация держать не более 4к в одной директории
Павел
Павел
Можно по дате директории создавать, но это несколько раскрывает информацию
Павел
The Ant
Хеш от файла тож говно. Если надо будет скопировать куда-то весь объем, то ты в жопе )
Павел
Павел
Например можно uuid
Павел
Главная проблема - это коллизии
Павел
Раз создал, а дальше тупо по имени которое сохранил ходишь
Михаил
Михаил
если уж на то пошло, то можно сделать таблицу в которой вести имена бакетов и кол-во файлов в ней
Но на вашем месте я бы не парился
Павел
Михаил
Если прожект непбольно то просто фигачить в 1 фолдер и всё
The Ant
Павел
Павел
А если надо тупо всё- то тупо всё и копируешь
The Ant
Или ты имена вообще не хранишь в БД? Я чет короче проблемы не понимаю.
Не, я про то, что файлы мелкие. Картинки. И их дофига. Но проблема с хешем в том, что директорий, в которых лежат файлы очень много.
Рсинк тотже копирует такое ппц долго. Почти как фтп. Сначала проверяет наличие директории, потом создаёт по одной, потом ток сам файл копирует.
The Ant
Т.е. переезд с сервера на сервер это становится проблемой
Павел
Или в стретегии хэша слишком много сегментов?
Павел
Грубо говоря, 1 первой буквы достаточно
The Ant
Но один файл это для крупных ребят
Павел
Павел
Павел
Между твоим 7 символами и хэшем, особо разницы не вижу, кроме затраченных ресурсов и фичи перезаписи
The Ant
Вообще не понял...
Файловые системы очень плохо работают с мелкими файлами. Максимально хуево я бы сказал )
Поэтому писать картинку в один гигафайл, на максимальный размер. И рядышком метаданные сохранять хз. Тип какая-то картинка с 1 по 11432байт
Павел
The Ant
The Ant
The Ant
Копирование всего этого очень болезненное
The Ant