Загрузка миллионов изображений с планшета на сервер

#sql-server #image #iis #media

#sql-сервер #изображение #iis #Медиафайлы

Вопрос:

Я хочу создать систему, которая позволит тысячам пользователей загружать изображения с планшета в систему управления контентом. За одну загрузку каждый пользователь может загружать до 12 изображений одновременно, и в день может быть до 20 000 загрузок. Поскольку число составляет менее 240 000 изображений в день, мне было интересно, каков наилучший подход, чтобы избежать закупорки бутылок в часы пик.

Я подумываю об использовании фермы веб-серверов (IIS) для загрузки изображений через HTTP POST. Где каждое изображение меньше 200 КБ, и я мог бы хранить изображения в файловой системе. Это будет 48 ГБ в день и всего 16 ТБ в год.

Тогда я мог бы сохранить метаданные изображения в базе данных SQL Server вместе с другими текстовыми данными. Позже пользователи захотят отозвать изображения и другие (текстовые) данные из базы данных на планшет для дальнейшей обработки.

В небольших масштабах это не проблема, но меня интересует, что, по мнению всех, является наилучшим подходом для загрузки / извлечения такого большого количества изображений / записей в день?

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

1. существуют сервисы, которые вы можете использовать для этого. создание такой системы с нуля займет несколько месяцев вашего времени и все равно будет далеко позади.

2. Привет, какие услуги доступны?

3. Я бы предложил Uploadcare, но я предвзят 🙂

Ответ №1:

Мне было интересно, как лучше всего избежать закупоривания бутылок в часы пик.

Достаточно оборудования. Точка.

Я подумываю об использовании фермы веб-серверов (IIS) для загрузки изображений через HTTP POST.

Нет альтернативы тому, что стоит упомянуть.

Это будет 48 ГБ в день и всего 16 ТБ в год.

Да. Современное хранилище просто фантастическое 😉

Тогда я мог бы сохранить метаданные изображения в базе данных SQL Server вместе с другими текстовыми данными.

Что делает этот ia довольно маленькой базой данных ldat — что хорошо. В конце это означает, что проблема сводится к хранилищу изображений, база данных на самом деле не такая большая.

В небольших масштабах это не проблема, но меня интересует, что, по мнению всех, является наилучшим подходом для загрузки / извлечения такого большого количества изображений / записей в день?

Я не уверен, что вы уже достигли больших масштабов. Проблемы будут повсюду:

  • Количество файлов. Вам нужно разделить их на несколько папок и лучше всего иметь представление о сегментах в базе данных, чтобы вы могли разделить их на несколько сегментов, каждый из которых является собственным сервером (серверами) — хорошо для долгосрочного обслуживания.

  • Резервное копирование / восстановление — это проблема, но намного меньше, когда вы используете (а) ленты и (б) корзины, как сказано выше — вероятность полной проблемы мала. Также «3-4 копии на отдельных машинах» могут работать достаточно хорошо.

За исключением проблемы с корзиной — т. Е. Вы не можете поместить все эти файлы в простую папку, что будет очень громоздко — у вас все в порядке. Это не совсем супер большой. Сохраняйте веб-уровень без состояния, чтобы его можно было масштабировать, то же самое на серверной части хранилища, затем используйте базу данных, чтобы связать все это вместе, и убедитесь, что вы ЧАСТО делаете резервные копии базы данных (например, все 15 минут).

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

1. Да, проблема хранения миллионов файлов на нескольких локальных серверах для меня нова. Есть ли какая-либо базовая теория, которую я могу прочитать, чтобы найти наилучший подход?

2. Насколько я знаю, нет. В основном это сводится к тому, что многие вещи занимают больше времени. В зависимости от файловой системы вы также можете столкнуться с жесткими ограничениями. Но, например, Windows — НЕТ проблем с миллионом файлов в папке, ПОКА вы по какой-то причине не откроете папку в проводнике …. пользовательский интерфейс на самом деле не разработан с учетом миллиона файлов в папке 😉 Это происходит со многими инструментами. Здесь вам определенно нужен сегмент.

Ответ №2:

Одним из возможных способов является загрузка с клиента непосредственно на Amazon S3. Он будет масштабироваться и принимать любое количество файлов, загружаемых на него. После завершения загрузки на S3 сохраните ссылку на объект S3 вместе с полезной метой в своей базе данных. При этой настройке вы избежите узкого места при загрузке файлов и сможете сохранять ~ 240 000 записей в день в своей базе данных, что не должно быть проблемой.

Если вы хотите создать сервис, который добавит ценность и сэкономит некоторое (на самом деле огромное) время при загрузке файлов, рассмотрите возможность использования существующих сторонних решений, созданных для решения этой конкретной проблемы. Например, Uploadcare и некоторые из его конкурентов.