私は毎秒たくさんの画像を保存する必要があるプロジェクトに取り組んでいます。また、画像をS3とDynamoDBのどちらに保存する必要があるのか少し混乱しています。私の混乱は、S3がバッチ要求をサポートしていないようであり、必要に応じてすべての画像をバッチで取得できる必要があるためです。一方、これらすべての画像をdynamoDBのテーブルに保存するのが良いかどうかはわかりません。最善のアプローチは何でしょうか?
簡単な答え:S3を使用してください。
長い答え:DynamoDBは個々のレコードを64 KBに制限しているため、画像が小さい場合を除いて、おそらくできません DynamoDBを使用します。
バッチリクエストで画像を読み取りたいとおっしゃっていますが、DynamoDBバッチリクエストは最大100レコードまたは1 MBのいずれか少ない方を返すため、とにかくすべての画像を一度に取得できるわけではありません。一度に1ページずつ読み取ることで、DynamoDBからすべてをダンプできます。つまり、次々に大量のリクエストが発生します。速くない。
DynamoDBはS3よりもレイテンシーが低く、構成可能なスループットをサポートします。ただし、S3は、箱から出して必要なだけの同時実行性をサポートします。一度に1000枚の画像をアップロードしたいですか?頑張れ!同時に必要な数だけ送信できるため、各オブジェクトの書き込みに400ミリ秒かかるかどうかは関係ありません。同様に、バケット内のすべてのリストを取得し、すべてのオブジェクトを並行して取得することで、S3からすべてをダンプできます。
S3を使用するその他の理由:
DynamoDBが画像ストレージに適していると私が想像できる唯一の状況は、画像が小さく、頻繁に変更される場合、および読み取り遅延に非常に敏感である場合です。それ以外は、S3を使用してください。
画像をS3に保存します。 DynamoDBの制限は、willglynnによって説明されています。ただし、画像やその他のメタデータへのURLをDynamoDBに保存することをお勧めします。
DynamoDBについて少し警告しますが、非常に高額になる可能性があります。フリーティアからの移行は、スループットユニットが12を超えると、簡単に数百ドルかかる可能性があります。さらに大きな容量が必要な大きなアイテム(画像など64KB近く)を保存するために使用した場合、数千ドルを支払うことになる可能性が非常に高くなります。 AWSでメタデータを保存するには、SimpleDBを確認することをお勧めします。