web-dev-qa-db-ja.com

S3のディレクトリごとの最大ファイル

100万枚の画像がある場合、それらをいくつかのフォルダー/サブフォルダー階層に保存するか、すべてを直接(フォルダーなしで)バケットにダンプする方が良いでしょうか?

すべての画像を階層のないバケットにダンプすると、LIST操作が遅くなりますか?

フォルダーとサブフォルダーをその場で作成し、それらのACLを設定する(プログラム的に言えば)場合、大きなオーバーヘッドがありますか?

84
Nikhil Gupte

S3は階層的な名前空間を尊重しません。各バケットには、キーからオブジェクトへの多数のマッピング(関連するメタデータ、ACLなど)が含まれています。

オブジェクトのキーに「/」が含まれている場合でも、S3はパスをプレーンな文字列として扱い、すべてのオブジェクトをフラットな名前空間に入れます。

私の経験では、LIST操作はオブジェクト数が増えると(線形に)長くかかりますが、これはおそらく、Amazonサーバーで必要なI/Oが増加し、クライアントに送られることの兆候です。

ただし、ルックアップ時間はオブジェクト数とともに増加するようには見えません-おそらく何らかの種類のO(1)ハッシュテーブルの実装が最後にあります-したがって、同じバケットに多くのオブジェクトがあるのは通常の使用(つまり、リストではない)の小さなバケットとしてのパフォーマンス。

ACLに関しては、許可はバケットと各オブジェクトに設定できます。階層がないので、それらは2つのオプションです。明らかに、ファイル数が数百万の場合、バケット全体の許可をできるだけ多く設定すると、管理者の頭痛が大幅に軽減されますが、grant許可のみを取り消すことはできないため、バケット全体の許可はすべてのコンテンツのACLの最大サブセット。

次の場合は、個別のバケットに分割することをお勧めします。

  • まったく異なるコンテンツ-画像、音声、その他のデータ用に別々のバケットを用意することで、より健全なアーキテクチャが実現します
  • 大幅に異なるACL-各オブジェクトが特定のACLを受け取る1つのバケット、または異なるACLを持ちオブジェクト固有のACLを持たない2つのバケットを持つことができる場合、2つのバケットを取得します。
117
James Brady

元の質問「S3のディレクトリあたりの最大ファイル数」に対する回答は、無制限です。 バケット内のオブジェクトのS3制限 も参照してください。

55
Vacilando