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