Bewährte Methoden zur Optimierung der Leistung von S3 Express One Zone - Amazon Simple Storage Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Bewährte Methoden zur Optimierung der Leistung von S3 Express One Zone

Bei der Entwicklung von Anwendungen, die Objekte zu Amazon S3 Express One Zone hochladen und daraus abrufen, sollten Sie unsere bewährten Methoden befolgen, um die Leistung zu optimieren. Um die Speicherklasse S3 Express One Zone zu verwenden, müssen Sie einen S3-Verzeichnis-Bucket erstellen. Die Speicherklasse S3 Express One Zone wird für die Verwendung mit S3-Allzweck-Buckets nicht unterstützt.

Leistungsrichtlinien für alle anderen Amazon-S3-Speicherklassen und S3-Allzweck-Buckets finden Sie unter Bewährte Methoden für Designmuster: Optimieren der Leistung von Amazon S3.

Für optimale Leistung und Skalierbarkeit mit S3 Express One Zone-Speicherklassen- und Verzeichnis-Buckets bei umfangreichen Workloads ist es wichtig zu verstehen, wie sich Verzeichnis-Buckets von Allzweck-Buckets unterscheiden. Anschließend stellen wir bewährte Methoden zur Verfügung, mit denen Sie Ihre Anwendungen an die Funktionsweise von Directory-Buckets anpassen können.

Wie funktionieren Directory-Buckets

Die Speicherklasse Amazon S3 Express One Zone kann Workloads mit bis zu 2.000.000 GET- und bis zu 200.000 PUT-Transaktionen pro Sekunde (TPS) pro Verzeichnis-Bucket unterstützen. Mit S3 Express One Zone werden Daten in S3-Verzeichnis-Buckets in Availability Zones gespeichert. Auf Objekte in Verzeichnis-Buckets kann innerhalb eines hierarchischen Namespace zugegriffen werden, ähnlich wie in einem Dateisystem und im Gegensatz zu S3-Allzweck-Buckets, die einen flachen Namespace haben. Im Gegensatz zu Allzweck-Buckets organisieren Verzeichnis-Buckets Schlüssel hierarchisch in Verzeichnissen statt nach Präfixen. Ein Präfix ist eine Zeichenfolge am Anfang des Objektschlüsselnamens. Sie können Präfixe verwenden, um Ihre Daten zu organisieren und eine flache Objektspeicherarchitektur in Allzweck-Buckets zu verwalten. Weitere Informationen finden Sie unter Organisieren von Objekten mit Präfixen.

In Verzeichnis-Buckets werden Objekte in einem hierarchischen Namespace organisiert, wobei der Schrägstrich (/) das einzige unterstützte Trennzeichen ist. Wenn Sie ein Objekt mit einem Schlüssel wie hochladendir1/dir2/file1.txt, dir2/ werden die Verzeichnisse dir1/ automatisch von Amazon S3 erstellt und verwaltet. Verzeichnisse werden während PutObject CreateMultiPartUpload Oder-Operationen erstellt und automatisch entfernt, wenn sie nach DeleteObject AbortMultiPartUpload Oder-Vorgängen leer werden. Es gibt keine Obergrenze für die Anzahl der Objekte und Unterverzeichnisse in einem Verzeichnis.

Die Verzeichnisse, die beim Hochladen von Objekten in Verzeichnis-Buckets erstellt werden, können sofort skaliert werden, um die Wahrscheinlichkeit von HTTP-Fehlern zu verringern. 503 (Slow Down) Diese automatische Skalierung ermöglicht Ihren Anwendungen, Lese- und Schreibanforderungen innerhalb von Verzeichnissen und zwischen Verzeichnissen nach Bedarf zu parallelisieren. Für S3 Express One Zone sind einzelne Verzeichnisse so konzipiert, dass sie die maximale Anforderungsrate eines Verzeichnis-Buckets unterstützen. Es ist nicht erforderlich, Schlüsselpräfixe nach dem Zufallsprinzip zu sortieren, um eine optimale Leistung zu erzielen, da das System Objekte automatisch verteilt, um eine gleichmäßige Lastverteilung zu gewährleisten. Aus diesem Grund werden Schlüssel jedoch nicht lexikografisch in Verzeichnis-Buckets gespeichert. Dies steht im Gegensatz zu S3-Buckets für allgemeine Zwecke, bei denen sich Schlüssel, die lexikografisch näher beieinander liegen, eher auf demselben Server befinden.

Weitere Hinweise zu Beispielen für Directory-Bucket-Operationen und Verzeichnisinteraktionen finden Sie unter. Beispiele für den Betrieb von Verzeichnis-Buckets und die Interaktion mit Verzeichnissen

Bewährte Methoden

Folgen Sie den bewährten Methoden, um die Leistung Ihres Directory-Buckets zu optimieren und Ihre Workloads im Laufe der Zeit skalieren zu lassen.

Verwenden Sie Verzeichnisse, die viele Einträge enthalten (Objekte oder Unterverzeichnisse)

Verzeichnis-Buckets bieten standardmäßig eine hohe Leistung für alle Workloads. Für eine noch bessere Leistungsoptimierung bei bestimmten Vorgängen führt die Konsolidierung von mehr Einträgen (bei denen es sich um Objekte oder Unterverzeichnisse handelt) in Verzeichnissen zu einer geringeren Latenz und einer höheren Anforderungsrate:

  • Mutierende API-Operationen wiePutObject, CreateMultiPartUpload und erzielen eine optimale LeistungAbortMultiPartUpload, wenn sie mit weniger, dichteren Verzeichnissen mit Tausenden von Einträgen implementiert werden, anstatt mit einer großen Anzahl kleinerer Verzeichnisse. DeleteObject

  • ListObjectsV2Operationen funktionieren besser, wenn weniger Verzeichnisse durchsucht werden müssen, um eine Ergebnisseite zu füllen.

Verwenden Sie keine Entropie in Präfixen

Bei Amazon S3 S3-Vorgängen bezieht sich Entropie auf die Zufälligkeit bei der Benennung von Präfixen, die dazu beiträgt, Arbeitslasten gleichmäßig auf Speicherpartitionen zu verteilen. Da Verzeichnis-Buckets die Lastverteilung jedoch intern verwalten, ist es nicht empfehlenswert, Entropie in Präfixen zu verwenden, um eine optimale Leistung zu erzielen. Dies liegt daran, dass bei Verzeichnis-Buckets die Entropie dazu führen kann, dass Anfragen langsamer werden, da die bereits erstellten Verzeichnisse nicht wiederverwendet werden.

Ein Schlüsselmuster, wie es dazu führen $HASH/directory/object könnte, dass viele Zwischenverzeichnisse entstehen. Im folgenden Beispiel sind alle job-1 s unterschiedliche Verzeichnisse, da ihre übergeordneten Verzeichnisse unterschiedlich sind. Verzeichnisse werden spärlich sein und Mutations- und Listenanfragen werden langsamer sein. In diesem Beispiel gibt es 12 Zwischenverzeichnisse, die alle einen einzigen Eintrag haben.

s3://my-bucket/0cc175b9c0f1b6a831c399e269772661/job-1/file1 s3://my-bucket/92eb5ffee6ae2fec3ad71c777531578f/job-1/file2 s3://my-bucket/4a8a08f09d37b73795649038408b5f33/job-1/file3 s3://my-bucket/8277e0910d750195b448797616e091ad/job-1/file4 s3://my-bucket/e1671797c52e15f763380b45e841ec32/job-1/file5 s3://my-bucket/8fa14cdd754f91cc6554c9e71929cce7/job-1/file6

Um die Leistung zu verbessern, können wir stattdessen die $HASH Komponente entfernen und job-1 sie zu einem einzigen Verzeichnis machen, wodurch die Dichte eines Verzeichnisses verbessert wird. Im folgenden Beispiel kann das einzelne Zwischenverzeichnis mit 6 Einträgen im Vergleich zum vorherigen Beispiel zu einer besseren Leistung führen.

s3://my-bucket/job-1/file1 s3://my-bucket/job-1/file2 s3://my-bucket/job-1/file3 s3://my-bucket/job-1/file4 s3://my-bucket/job-1/file5 s3://my-bucket/job-1/file6

Dieser Leistungsvorteil besteht darin, dass, wenn ein Objektschlüssel anfänglich erstellt wird und sein Schlüsselname ein Verzeichnis enthält, das Verzeichnis automatisch für das Objekt erstellt wird. Bei nachfolgenden Objekt-Uploads in dasselbe Verzeichnis muss das Verzeichnis nicht erstellt werden, wodurch die Latenz beim Hochladen von Objekten in bestehende Verzeichnisse reduziert wird.

Verwenden Sie ein anderes Trennzeichen als das Trennzeichen/, um Teile Ihres Schlüssels zu trennen, wenn Sie Objekte bei Aufrufen nicht logisch gruppieren müssen ListObjectsV2

Da das / Trennzeichen speziell für Verzeichnis-Buckets verwendet wird, sollte es mit Absicht verwendet werden. Verzeichnis-Buckets ordnen Objekte zwar nicht lexikografisch, aber Objekte innerhalb eines Verzeichnisses werden dennoch in Ausgaben gruppiert. ListObjectsV2 Wenn Sie diese Funktion nicht benötigen, können Sie sie durch ein anderes Zeichen als Trennzeichen / ersetzen, damit keine Zwischenverzeichnisse entstehen.

Gehen Sie beispielsweise davon aus, dass sich die folgenden Schlüssel in einem YYYY/MM/DD/HH/ Präfixmuster befinden

s3://my-bucket/2024/04/00/01/file1 s3://my-bucket/2024/04/00/02/file2 s3://my-bucket/2024/04/00/03/file3 s3://my-bucket/2024/04/01/01/file4 s3://my-bucket/2024/04/01/02/file5 s3://my-bucket/2024/04/01/03/file6

Wenn Sie Objekte in den ListObjectsV2 Ergebnissen nicht nach Stunden oder Tagen gruppieren müssen, sondern Objekte nach Monaten gruppieren müssen, YYYY/MM/DD-HH- führt das folgende Schlüsselmuster von zu deutlich weniger Verzeichnissen und zu einer besseren Leistung des ListObjectsV2 Vorgangs.

s3://my-bucket/2024/04/00-01-file1 s3://my-bucket/2024/04/00-01-file2 s3://my-bucket/2024/04/00-01-file3 s3://my-bucket/2024/04/01-02-file4 s3://my-bucket/2024/04/01-02-file5 s3://my-bucket/2024/04/01-02-file6

Verwenden Sie nach Möglichkeit Operationen mit getrennten Listen

Eine ListObjectsV2 Anfrage ohne a delimiter führt eine rekursive Durchquerung aller Verzeichnisse nach der Tiefe durch. Eine ListObjectsV2 Anfrage mit a delimiter ruft nur Einträge in dem durch den prefix Parameter angegebenen Verzeichnis ab, wodurch die Latenz der Anfrage reduziert und die Anzahl der aggregierten Schlüssel pro Sekunde erhöht wird. Verwenden Sie für Verzeichnis-Buckets nach Möglichkeit Operationen mit getrennten Listen. Durch getrennte Listen werden Verzeichnisse seltener besucht, was zu mehr Schlüsseln pro Sekunde und einer geringeren Latenz bei Anfragen führt.

Zum Beispiel für die folgenden Verzeichnisse und Objekte in Ihrem Verzeichnis-Bucket:

s3://my-bucket/2024/04/12-01-file1 s3://my-bucket/2024/04/12-01-file2 ... s3://my-bucket/2024/05/12-01-file1 s3://my-bucket/2024/05/12-01-file2 ... s3://my-bucket/2024/06/12-01-file1 s3://my-bucket/2024/06/12-01-file2 ... s3://my-bucket/2024/07/12-01-file1 s3://my-bucket/2024/07/12-01-file2 ...

Verwenden Sie für eine bessere ListObjectsV2 Leistung eine durch Trennzeichen getrennte Liste, um Ihre Unterverzeichnisse und Objekte aufzulisten, sofern die Logik Ihrer Anwendung dies zulässt. Sie können beispielsweise den folgenden Befehl für die Operation mit getrennten Listen ausführen:

aws s3api list-objects-v2 --bucket my-bucket --prefix '2024/' --delimiter '/'

Die Ausgabe ist die Liste der Unterverzeichnisse.

{ "CommonPrefixes": [ { "Prefix": "2024/04/" }, { "Prefix": "2024/05/" }, { "Prefix": "2024/06/" }, { "Prefix": "2024/07/" } ] }

Um jedes Unterverzeichnis mit besserer Leistung aufzulisten, können Sie einen Befehl wie das folgende Beispiel ausführen:

Befehl:

aws s3api list-objects-v2 --bucket my-bucket --prefix '2024/04' --delimiter '/'

Ausgabe:

{ "Contents": [ { "Key": "2024/04/12-01-file1" }, { "Key": "2024/04/12-01-file2" } ] }

Platzieren Sie den S3-Express-One-Zone-Speicher gemeinsam mit Ihren -Computingressourcen

Bei S3 Express One Zone befindet sich jeder Verzeichnis-Bucket in einer einzigen Availability Zone, die Sie bei der Erstellung des Buckets auswählen. Sie können damit beginnen, indem Sie neuen Verzeichnis-Bucket in einer Availability Zone erstellen, die für Ihre Computing-Workloads oder Ressourcen lokal ist. Sie können dann sofort mit Lese- und Schreibvorgängen mit sehr niedriger Latenz beginnen. Directory-Buckets sind eine Art von S3-Buckets, in denen Sie die Availability Zone auswählen können, AWS-Region um die Latenz zwischen Datenverarbeitung und Speicher zu reduzieren.

Wenn Sie in verschiedenen Availability Zones auf Verzeichnis-Buckets zugreifen, kann es zu einer leicht erhöhten Latenz kommen. Um die Leistung zu optimieren, empfehlen wir, dass Sie von Amazon Elastic Container Service-, Amazon Elastic Kubernetes Service- und Amazon Elastic Compute Cloud-Instances, die sich nach Möglichkeit in derselben Availability Zone befinden, auf einen Directory-Bucket zugreifen.

Verwenden Sie gleichzeitige Verbindungen, um bei Objekten über 1 MB einen hohen Durchsatz zu erzielen

Sie erreichen die beste Leistung durch die Ausgabe mehrerer gleichzeitiger Anfragen an Verzeichnis-Buckets zur Verteilung Ihrer Anforderungen auf separate Verbindungen und zur Maximierung der verfügbaren Bandbreite. Wie bei Allzweck-Buckets gibt es auch bei S3 Express One Zone keine Beschränkungen für die Anzahl der Verbindungen, die zu Ihrem Verzeichnis-Bucket hergestellt werden. Einzelne Verzeichnisse können die Leistung horizontal und automatisch skalieren, wenn eine große Anzahl gleichzeitiger Schreibvorgänge in dasselbe Verzeichnis stattfindet.

Einzelne TCP-Verbindungen zu Verzeichnis-Buckets haben eine feste Obergrenze für die Anzahl der Byte, die pro Sekunde hoch- oder heruntergeladen werden können. Wenn Objekte größer werden, werden die Anforderungszeiten eher vom Byte-Streaming als von der Transaktionsverarbeitung dominiert. Wenn Sie mehrere Verbindungen verwenden möchten, um den Upload oder Download größerer Objekte zu parallelisieren, können Sie die Latenz reduzieren end-to-end. Wenn Sie das Java 2.x SDK verwenden, sollten Sie die Verwendung des S3 Transfer Managers in Betracht ziehen, der Leistungsverbesserungen wie die mehrteiligen Upload-API-Operationen und Bytebereichs-Abrufe für den parallel Zugriff auf Daten nutzt.

Verwenden Sie Gateway-VPC-Endpunkte

Gateway-Endpunkte bieten eine direkte Verbindung von Ihrer VPC zu Directory-Buckets, ohne dass ein Internet-Gateway oder ein NAT-Gerät für Ihre VPC erforderlich ist. Um die Zeit zu reduzieren, die Ihre Pakete im Netzwerk verbringen, sollten Sie Ihre VPC mit einem Gateway-VPC-Endpunkt für Directory-Buckets konfigurieren. Weitere Informationen finden Sie unter Netzwerke für Verzeichnis-Buckets.

Verwenden Sie die Sitzungsauthentifizierung und verwenden Sie Sitzungstoken erneut, solange sie gültig sind

Verzeichnis-Buckets bieten einen Authentifizierungsmechanismus für Sitzungstoken, um die Latenz bei leistungsabhängigen API-Vorgängen zu reduzieren. Sie können einen einzigen Aufruf tätigen, CreateSession um ein Sitzungstoken zu erhalten, das dann in den folgenden 5 Minuten für alle Anfragen gültig ist. Um die geringste Latenz bei Ihren API-Aufrufen zu erzielen, stellen Sie sicher, dass Sie ein Sitzungstoken erwerben und es für die gesamte Lebensdauer dieses Tokens wiederverwenden, bevor Sie es aktualisieren.

Wenn Sie diese Option verwenden AWS SDKs, werden SDKs die Aktualisierungen des Sitzungstokens automatisch durchgeführt, um Dienstunterbrechungen zu vermeiden, wenn eine Sitzung abläuft. Wir empfehlen, dass Sie den verwenden, AWS SDKs um Anfragen an den CreateSession API-Vorgang zu initiieren und zu verwalten.

Mehr über CreateSession erfahren Sie unter Autorisieren zonaler Endpunkt-API-Operationen mit CreateSession.

Verwenden Sie einen CRT-basierten Client

Die AWS Common Runtime (CRT) besteht aus modularen, performanten und effizienten Bibliotheken, die in C geschrieben wurden und als Grundlage für die dienen sollen. AWS SDKs Die CRT bietet einen verbesserten Durchsatz, ein verbessertes Verbindungsmanagement und schnellere Startzeiten. Das CRT ist auf allen Geräten AWS SDKs außer Go verfügbar.

Weitere Informationen zur Konfiguration der CRT für das von Ihnen verwendete SDK finden Sie unter AWS Common Runtime (CRT) -Bibliotheken, Beschleunigen Sie den Amazon S3 S3-Durchsatz mit der AWS Common Runtime, Einführung in den CRT-basierten S3-Client und den S3 Transfer Manager im AWS SDK for Java 2.x, S3 CrtClient fürAmazon S3 S3-Operationen verwenden und CRT-basierte HTTP-Clients konfigurieren. AWS

Verwenden Sie die neueste Version von AWS SDKs

AWS SDKs Sie bieten integrierte Unterstützung für viele der empfohlenen Richtlinien zur Optimierung der Amazon S3 S3-Leistung. Sie SDKs bieten eine einfachere API zur Nutzung der Vorteile von Amazon S3 innerhalb einer Anwendung und werden regelmäßig aktualisiert, um den neuesten Best Practices zu entsprechen. Beispielsweise werden Anfragen nach 503 HTTP-Fehlern SDKs automatisch wiederholt und langsame Verbindungsantworten verarbeitet.

Wenn Sie das Java 2.x SDK verwenden, sollten Sie den S3 Transfer Manager in Betracht ziehen, der Verbindungen automatisch horizontal skaliert, um Tausende von Anfragen pro Sekunde zu erreichen, wobei gegebenenfalls Bytebereichsanforderungen verwendet werden. Bytebereichsanforderungen können die Leistung verbessern, da Sie gleichzeitige Verbindungen zu S3 verwenden können, um verschiedene Bytebereiche aus demselben Objekt abzurufen. Dies hilft beim Erreichen eines höheren aggregierten Durchsatzes als bei einer einzelnen Anforderung eines ganzen Objekts. Daher ist es wichtig, die neueste Version von zu verwenden, AWS SDKs um die neuesten Funktionen zur Leistungsoptimierung zu erhalten.

Fehlerbehebung bei der Leistung

Richten Sie Wiederholungsanforderungen für latenzempfindliche Anwendungen ein?

S3 Express One Zone wurde speziell für gleichbleibende Leistung ohne zusätzliche Anpassungen entwickelt. Die Festlegung aggressiver Timeout-Werte und Wiederholungsversuche kann jedoch weiter zu einer gleichbleibenden Latenz und Leistung beitragen. AWS SDKs Sie verfügen über konfigurierbare Timeout- und Wiederholungswerte, die Sie an die Toleranzen Ihrer spezifischen Anwendung anpassen können.

Verwenden Sie AWS Common Runtime (CRT) -Bibliotheken und optimale EC2 Amazon-Instance-Typen?

Anwendungen, die eine große Anzahl von Lese- und Schreibvorgängen ausführen, benötigen wahrscheinlich mehr Arbeitsspeicher oder Computing-Kapazitäten als Anwendungen, bei denen dies nicht der Fall ist. Wenn Sie Ihre Amazon Elastic Compute Cloud (Amazon EC2) -Instances für Ihre leistungsintensive Arbeitslast starten, wählen Sie Instance-Typen aus, die über die Menge dieser Ressourcen verfügen, die Ihre Anwendung benötigt. S3 Express One Zone Hochleistungsspeicher lässt sich ideal mit größeren und neueren Instance-Typen kombinieren, die über mehr Systemspeicher verfügen und leistungsfähiger sind CPUs und GPUs die Vorteile von leistungsfähigerem Speicher nutzen können. Wir empfehlen außerdem, die neuesten Versionen von CRT-Enabled zu verwenden AWS SDKs, wodurch Lese- und Schreibanforderungen besser parallel beschleunigt werden können.

Verwenden Sie AWS SDKs für die sitzungsbasierte Authentifizierung?

Mit Amazon S3 können Sie auch die Leistung optimieren, wenn Sie HTTP-REST-API-Anfragen verwenden, indem Sie dieselben bewährten Methoden befolgen, die Teil von sind AWS SDKs. Angesichts des sitzungsbasierten Autorisierungs- und Authentifizierungsmechanismus, der von S3 Express One Zone verwendet wird, empfehlen wir Ihnen jedoch dringend, das Token für die Verwaltung CreateSession und das zugehörige verwaltete Sitzungstoken AWS SDKs zu verwenden. Sie erstellen und aktualisieren Tokens AWS SDKs automatisch in Ihrem Namen mithilfe der CreateSession API-Operation. Bei der Autorisierung der einzelnen Anfragen wird die AWS Identity and Access Management Round-Trip-Latenz pro Anfrage (IAM) CreateSession eingespart.

Beispiele für den Betrieb von Verzeichnis-Buckets und die Interaktion mit Verzeichnissen

Im Folgenden werden drei Beispiele zur Funktionsweise von Verzeichnis-Buckets gezeigt.

Beispiel 1: Wie PutObject S3-Anfragen an einen Verzeichnis-Bucket mit Verzeichnissen interagieren

  1. Wenn die Operation in einem leeren Bucket ausgeführt PUT(<bucket>, "documents/reports/quarterly.txt") wird, wird das Verzeichnis documents/ im Stammverzeichnis des Buckets erstellt, das Verzeichnis reports/ darin documents/ wird erstellt und das Objekt quarterly.txt darin reports/ wird erstellt. Für diesen Vorgang wurden zusätzlich zum Objekt zwei Verzeichnisse erstellt.

    Diagramm, das die Verzeichnisstruktur nach der PUT-Operation für zeigt documents/reports/quarterly.txt
  2. Wenn dann eine weitere Operation ausgeführt PUT(<bucket>, "documents/logs/application.txt") wird, ist das Verzeichnis documents/ bereits vorhanden, das Verzeichnis logs/ darin ist documents/ nicht vorhanden und wird erstellt, und das logs/ darin application.txt enthaltene Objekt wird erstellt. Für diesen Vorgang wurde zusätzlich zu dem Objekt nur ein Verzeichnis erstellt.

    Diagramm, das die Verzeichnisstruktur nach der PUT-Operation für zeigt documents/logs/application.txt
  3. Wenn schließlich eine PUT(<bucket>, "documents/readme.txt") Operation ausgeführt wird, ist das Verzeichnis documents/ im Stammverzeichnis bereits vorhanden und das Objekt readme.txt wird erstellt. Für diesen Vorgang werden keine Verzeichnisse erstellt.

    Diagramm, das die Verzeichnisstruktur nach der PUT-Operation für zeigt documents/readme.txt

Beispiel 2: Wie ListObjectsV2 S3-Anfragen an einen Verzeichnis-Bucket mit Verzeichnissen interagieren

Bei ListObjectsV2 S3-Anfragen ohne Angabe eines Trennzeichens wird ein Bucket zuerst in die Tiefe durchsucht. Die Ausgaben werden in einer konsistenten Reihenfolge zurückgegeben. Diese Reihenfolge bleibt zwar zwischen den Anfragen gleich, die Reihenfolge ist jedoch nicht lexikografisch. Für den Bucket und die Verzeichnisse, die im vorherigen Beispiel erstellt wurden:

  1. Wenn a ausgeführt LIST(<bucket>) wird, documents/ wird das Verzeichnis eingegeben und das Traversieren beginnt.

  2. Das Unterverzeichnis logs/ wird eingegeben und das Traversieren beginnt.

  3. Das Objekt application.txt befindet sich darin. logs/

  4. Darin sind keine weiteren Einträge vorhandenlogs/. Der Listenvorgang wird beendet logs/ und documents/ erneut eingegeben.

  5. Das documents/ Verzeichnis wird weiterhin durchsucht und das Objekt readme.txt wird gefunden.

  6. Das documents/ Verzeichnis wird weiterhin durchsucht und das Unterverzeichnis reports/ wird aufgerufen und die Durchquerung beginnt.

  7. Das Objekt befindet sich darin. quarterly.txt reports/

  8. Darin sind keine weiteren Einträge vorhandenreports/. Die Liste wird verlassen reports/ und documents/ wieder eingegeben.

  9. In der Liste sind keine weiteren Einträge vorhanden documents/ und die Liste kehrt zurück.

In diesem Beispiel logs/ wird vorher bestellt readme.txt und readme.txt wird vorher bestelltreports/.

Beispiel 3: Wie DeleteObject S3-Anfragen an einen Verzeichnis-Bucket mit Verzeichnissen interagieren

Diagramm, das die ursprüngliche Verzeichnisstruktur vor DELETE-Vorgängen zeigt
  1. Wenn der Vorgang in demselben Bucket ausgeführt DELETE(<bucket>, "documents/reports/quarterly.txt") wird, quarterly.txt wird das Objekt gelöscht, sodass das Verzeichnis reports/ leer bleibt und es sofort gelöscht wird. Das documents/ Verzeichnis ist nicht leer, da es sowohl das Verzeichnis logs/ als auch das readme.txt Objekt enthält, sodass es nicht gelöscht wird. Für diesen Vorgang wurden nur ein Objekt und ein Verzeichnis gelöscht.

    Diagramm, das die Verzeichnisstruktur nach dem DELETE-Vorgang für zeigt documents/reports/quarterly.txt
  2. Wenn der Vorgang ausgeführt DELETE(<bucket>, "documents/readme.txt") wird, readme.txt wird das Objekt gelöscht. documents/ist immer noch nicht leer, weil es das Verzeichnis enthältlogs/, also wurde es nicht gelöscht. Bei diesem Vorgang werden keine Verzeichnisse gelöscht und nur das Objekt wird gelöscht.

    Diagramm, das die Verzeichnisstruktur nach dem DELETE-Vorgang für zeigt documents/readme.txt
  3. Wenn die Operation ausgeführt DELETE(<bucket>, "documents/logs/application.txt") wird, application.txt wird sie schließlich gelöscht, sodass sie logs/ leer bleibt und sofort gelöscht wird. Dadurch bleibt es documents/ leer und es wird auch sofort gelöscht. Für diesen Vorgang werden zwei Verzeichnisse und ein Objekt gelöscht. Der Bucket ist jetzt leer.

    Diagramm, das die Verzeichnisstruktur nach dem DELETE-Vorgang für zeigt documents/logs/application.txt