web-dev-qa-db-ja.com

多くの画像を保存するS3とDynamoDB

私は毎秒たくさんの画像を保存する必要があるプロジェクトに取り組んでいます。また、画像をS3とDynamoDBのどちらに保存する必要があるのか​​少し混乱しています。私の混乱は、S3がバッチ要求をサポートしていないようであり、必要に応じてすべての画像をバッチで取得できる必要があるためです。一方、これらすべての画像をdynamoDBのテーブルに保存するのが良いかどうかはわかりません。最善のアプローチは何でしょうか?

22
PachinSV

簡単な答え:S3を使用してください。

長い答え:DynamoDBは個々のレコードを64 KBに制限しているため、画像が小さい場合を除いて、おそらくできません DynamoDBを使用します。

バッチリクエストで画像を読み取りたいとおっしゃっていますが、DynamoDBバッチリクエストは最大100レコードまたは1 M​​Bのいずれか少ない方を返すため、とにかくすべての画像を一度に取得できるわけではありません。一度に1ページずつ読み取ることで、DynamoDBからすべてをダンプできます。つまり、次々に大量のリクエストが発生します。速くない。

DynamoDBはS3よりもレイテンシーが低く、構成可能なスループットをサポートします。ただし、S3は、箱から出して必要なだけの同時実行性をサポートします。一度に1000枚の画像をアップロードしたいですか?頑張れ!同時に必要な数だけ送信できるため、各オブジェクトの書き込みに400ミリ秒かかるかどうかは関係ありません。同様に、バケット内のすべてのリストを取得し、すべてのオブジェクトを並行して取得することで、S3からすべてをダンプできます。

S3を使用するその他の理由:

  • HTTP互換性があるため、他の人やアプリケーションを直接バケットに向けることができます
  • 大幅に低いストレージコスト
  • プロビジョニングされたスループットではなく、リクエストごとに支払います(DynamoDBの書き込み容量の640 KB/sは月額460ドルですが、S3のアップロード1000回あたりは一律0.01ドルです)

DynamoDBが画像ストレージに適していると私が想像できる唯一の状況は、画像が小さく、頻繁に変更される場合、および読み取り遅延に非常に敏感である場合です。それ以外は、S3を使用してください。

42
willglynn

画像をS3に保存します。 DynamoDBの制限は、willglynnによって説明されています。ただし、画像やその他のメタデータへのURLをDynamoDBに保存することをお勧めします。

DynamoDBについて少し警告しますが、非常に高額になる可能性があります。フリーティアからの移行は、スループットユニットが12を超えると、簡単に数百ドルかかる可能性があります。さらに大きな容量が必要な大きなアイテム(画像など64KB近く)を保存するために使用した場合、数千ドルを支払うことになる可能性が非常に高くなります。 AWSでメタデータを保存するには、SimpleDBを確認することをお勧めします。

5
inmyth