Сохранение большого количества изображений S3 vs DynamoDB

Я работаю над проектом, который должен хранить много изображений в секунду. И я немного смущен, если я должен хранить свои изображения в S3 или в DynamoDB. Моя путаница заключается в том, что кажется, что S3 не поддерживает пакетные запросы, и я должен иметь возможность получать все изображения в партии, если это необходимо; С другой стороны, я не уверен, что это хорошая идея сохранить все эти изображения в таблице в dynamoDB. Какой был бы лучший подход?

Ответы

Ответ 1

Короткий ответ: используйте S3.

Длинный ответ: DynamoDB ограничивает отдельные записи до 64 КБ, поэтому вы, вероятно, не можете использовать DynamoDB, если ваши изображения ничтожны.

Вы упомянули о желании прочитать ваши изображения в пакетном запросе, но пакетные запросы DynamoDB возвращают до 100 записей или 1 МБ - в зависимости от того, что меньше - так что вам не нравится получать все ваши изображения одновременно. Вы можете сбрасывать все с DynamoDB, читая страницу за раз, что означает много запросов один за другим. Не быстро.

DynamoDB имеет более низкую задержку, чем S3, и поддерживает настраиваемую пропускную способность. Однако S3 поддерживает столько же concurrency, сколько вы хотите из коробки. Хотите загрузить сразу 1000 изображений? Действуй! Неважно, если каждый объект занимает 400 мс для записи, поскольку вы можете передавать столько, сколько хотите одновременно. Аналогично, вы можете сбрасывать все с S3, получая список всего в ведре, а затем возвращая каждый объект параллельно.

Другие причины использования S3:

  • HTTP-совместимость, поэтому вы можете указать других людей или приложений прямо на ведро
  • Более низкие затраты на хранение
  • Плата за запрос, а не за предоставленную пропускную способность (640 Кбайт/с емкости записи в DynamoDB стоит 460 долл. США в месяц, по сравнению с плоской 0,01 долл. на 1000 загрузок на S3).

Единственная ситуация, с которой я могу представить, где DynamoDB может иметь смысл для хранения изображений, - это то, что ваши изображения небольшие, часто меняются, и вы очень чувствительны к латентности чтения. Кроме этого, используйте S3.

Ответ 2

Сохраняйте изображения в S3. Ограничения DynamoDB были описаны willglynn. Однако вы можете захотеть сохранить URL-адреса изображений и других метаданных в вашем DynamoDB.

Немного предупреждения о DynamoDB, это может быть очень дорого. Переход от свободного уровня может легко обойтись в несколько сотен долларов за еще десятки дополнительных пропускных единиц. Если вы использовали его для хранения больших предметов (около 64 КБ, таких как изображения), которые нуждаются в еще большей емкости, очень вероятно, что в итоге вы заплатите тысячу долларов. Для хранения метаданных с помощью AWS вы можете проверить SimpleDB.