Max. Dateien pro Verzeichnis in S3

87

Wenn ich eine Million Bilder hätte, wäre es besser, sie in einer Ordner- / Unterordnerhierarchie zu speichern oder sie alle direkt in einen Bucket (ohne Ordner) zu werfen?

Würde das Ablegen aller Bilder in einen hierarchielosen Bucket die LIST-Operationen verlangsamen?

Gibt es einen erheblichen Aufwand beim Erstellen von Ordnern und Unterordnern im laufenden Betrieb und beim Einrichten ihrer ACLs (programmgesteuert)?

Nikhil Gupte
quelle

Antworten:

122

S3 berücksichtigt keine hierarchischen Namespaces. Jeder Bucket enthält einfach eine Reihe von Zuordnungen von Schlüssel zu Objekt (zusammen mit zugehörigen Metadaten, ACLs usw.).

Obwohl der Schlüssel Ihres Objekts möglicherweise ein '/' enthält, behandelt S3 den Pfad als einfache Zeichenfolge und fügt alle Objekte in einen flachen Namespace ein.

Nach meiner Erfahrung dauern LIST-Vorgänge (linear) länger, wenn die Anzahl der Objekte zunimmt. Dies ist jedoch wahrscheinlich ein Symptom für die erhöhte E / A, die auf den Amazon-Servern und auf dem Weg zu Ihrem Client erforderlich ist.

Die Suchzeiten scheinen sich jedoch nicht mit der Anzahl der Objekte zu erhöhen - es handelt sich höchstwahrscheinlich um eine Art O (1) -Hashtabelle-Implementierung am Ende -, sodass viele Objekte im selben Bucket für den normalen Gebrauch genauso leistungsfähig sein sollten wie kleine Buckets (d. H. keine Listen).

Für die ACL können Zuschüsse für den Bucket und für jedes einzelne Objekt festgelegt werden. Da es keine Hierarchie gibt, sind dies Ihre einzigen beiden Optionen. Wenn Sie so viele Bucket-Wide-Grants festlegen, werden Ihre Administrationsprobleme natürlich massiv reduziert, wenn Sie über Millionen von Dateien verfügen. Denken Sie jedoch daran, dass Sie nur Berechtigungen erteilen und nicht widerrufen können. Daher sollten die Bucket-Wide-Grants die maximale Teilmenge der ACL für alle sein seinen Inhalt.

Ich würde empfehlen, in separate Eimer aufzuteilen für:

  • Ganz andere Inhalte - separate Buckets für Bilder, Ton und andere Daten sorgen für eine vernünftigere Architektur
  • signifikant unterschiedliche ACLs - Wenn Sie einen Bucket mit jedem Objekt haben können, das eine bestimmte ACL empfängt, oder zwei Buckets mit unterschiedlichen ACLs und ohne objektspezifische ACLs, nehmen Sie die beiden Buckets.
James Brady
quelle
In S3 gibt es Buckets und dann können Sie darin "Ordner" und "Objekte" haben, wobei ein Ordner in den Augen des Systems wahrscheinlich ein Objekt ist
mwm
14
@mwm du liegst falsch. Bei den "Ordnern" handelt es sich ausschließlich um UI-Feinheiten, die von dem von Ihnen verwendeten Tool bereitgestellt werden. James hat Recht, dass Schlüssel möglicherweise Schrägstriche haben, aber dass s3 sich überhaupt nicht darum kümmert - es betrachtet sie definitiv nicht als Ordner.
Ry4an Brase
S3 bewertet Limit-Anfragen definitiv basierend auf dem Pfadpräfix. Weitere Informationen finden Sie
Anatoly
S3-Präfixe sind nicht mehr erforderlich oder werden empfohlen: aws.amazon.com/about-aws/whats-new/2018/07/…
Aea
-3

Ich benutze eine Verzeichnisstruktur mit einem Stamm und dann mindestens einem Unterverzeichnis. Ich verwende oft "Dokumentimportdatum" als Verzeichnis unter dem Stammverzeichnis. Dies kann die Verwaltung von Backups etwas vereinfachen. Unabhängig davon, welches Dateisystem Sie verwenden, müssen Sie eventuell ein Limit für die Anzahl der Dateien erreichen (ein praktisches, wenn nicht ein physisches Limit). Sie könnten auch darüber nachdenken, mehrere Wurzeln zu unterstützen.

Jim Blizard
quelle