100万枚の画像がある場合、それらをいくつかのフォルダー/サブフォルダー階層に格納するのが良いでしょうか、それともそれらをすべて(フォルダーなしで)バケットに直接ダンプするのが良いでしょうか?
すべての画像を階層のないバケットにダンプすると、LIST操作が遅くなりますか?
オンザフライでフォルダーとサブフォルダーを作成し、それらのACLを設定する(プログラム的に言えば)には、かなりのオーバーヘッドがありますか?
回答:
S3は階層的な名前空間を考慮しません。各バケットには、キーからオブジェクトへの多数のマッピング(および関連するメタデータ、ACLなど)が含まれているだけです。
オブジェクトのキーに「/」が含まれている場合でも、S3はパスをプレーンな文字列として扱い、すべてのオブジェクトをフラットな名前空間に配置します。
私の経験では、オブジェクトの数が増えるにつれてLIST操作は(直線的に)より長くかかりますが、これはおそらく、Amazonサーバーで必要なI / Oの増加とクライアントへの通信のダウンの症状です。
ただし、ルックアップ時間はオブジェクト数とともに増加するようには見えません-それはおそらくその端にある種のO(1)ハッシュテーブル実装です-したがって、同じバケットに多くのオブジェクトがあることは、通常の使用(つまり、リストではありません)。
ACLについては、バケットと個々のオブジェクトごとに権限を設定できます。階層がないため、これらのオプションは2つしかありません。明らかに、何百万ものファイルがある場合、バケット全体の許可をできるだけ多く設定すると、管理上の問題が大幅に軽減されますが、許可のみを付与でき、取り消すことはできないため、バケット全体の許可は、すべてのACLの最大のサブセットである必要がありますその内容。
次の場合は、別々のバケットに分割することをお勧めします。
元の質問「S3のディレクトリあたりの最大ファイル数」への回答は無制限です。S3バケット内のオブジェクトの制限もご覧ください。