Экспорт фотографий … как эффективно обрабатывать такие запросы?

#php #mongodb

#php #mongodb

Вопрос:

Я работаю над веб-приложением, которое проводит инвентаризацию ваших домашних предметов. Я на 90% готов, за исключением того, что теперь мне нужно придумать способ экспорта фотографий, если пользователь того пожелает. Мне удалось экспортировать элементы в файл CSV, но что в этом хорошего, если они не могут получить свои фотографии? В настоящее время я использую MongoDB для серверной части, но независимо от того, как я их храню, мне нужен способ, при котором пользователь нажимает кнопку «Экспортировать фотографии», и она сжимается в один файл для загрузки пользователем.

Меня беспокоит только то, что, если они сохранили сотни фотографий?

Ответ №1:

Чтобы избежать сбоев в вашем php-процессе, я бы рекомендовал вам выгружать файлы из MongoDB один за другим во временный каталог файловой системы, а затем использовать exec в сочетании с tar или zip , чтобы превратить это в сжатый архив, который вы отправляете пользователю.

Конечно, это может закончиться довольно серьезной DDoS-атакой вашего сайта, поэтому вам лучше написать это осторожно, т. Е. Если у пользователя более 100 изображений, использование очереди с Gearman или какого-нибудь сервера RabbitMQ может быть хорошей вещью, и тогда вы могли бы сказать им, что они получат электронное письмо, как только будет готова ссылка для скачивания их архива или что-то в этом роде? Я полагаю, экспортировать все ваши фотографии не должно быть ежедневным делом, поэтому это может быть приемлемо.

Комментарии:

1. Я бы определенно заглянул в Gearman, и вы правы, это может привести к беспорядку, и последнее, чего я хочу избежать, — это когда пользователь нажимает так, как будто завтра не наступит. В конечном итоге я могу сделать это ручным процессом. Вероятность того, что кому-то понадобится загрузить весь архив, невелика, но если они нужны пользователю, я бы не возражал сделать это вручную и предоставить ссылку для загрузки.

Ответ №2:

Вы можете записать их последнюю попытку экспортировать архив и разрешать это только раз в час или около того (они могут сделать что-то не так в первый раз, поэтому всегда рекомендуется не устанавливать слишком длительный период истечения срока действия).

Комментарии:

1. Верно, но чем больше я думаю об этом, тем с большим количеством проблем я могу столкнуться. Я хотел бы сделать весь сайт самодостаточным, но какой ценой? Я просмотрел некоторые сайты моих конкурентов, и многие из них не предлагают возможности экспорта фотографий. Это то, что я хочу обсудить, но, возможно, мне следует просто выпустить сейчас и побеспокоиться об этом позже. 😉