Ответ 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.