


Warum ist das Herunterladen im Speicher langsamer als das Herunterladen im Dateisystem von aws s3?
Warum ist das Herunterladen im Speicher langsamer als das Herunterladen im Dateisystem von AWS S3? Beim Herunterladen von Dateien entscheiden wir uns normalerweise für den Download aus einem AWS S3-Bucket in das lokale Dateisystem. Manchmal stellen wir jedoch fest, dass die Verwendung der In-Memory-Download-Methode langsamer ist als der direkte Download von S3 in das Dateisystem. Dies liegt daran, dass das Herunterladen in den Speicher einige zusätzliche Schritte und einen Ressourcenverbrauch erfordert. Bei In-Memory-Downloads ist zunächst das Einlesen des Dateiinhalts in den Speicher und das anschließende Schreiben in das Dateisystem erforderlich. Dieser Vorgang erfordert zusätzliche Speichervorgänge und E/A-Vorgänge, wodurch die Download-Geschwindigkeit langsamer ist als beim direkten Herunterladen von S3 in das Dateisystem. Darüber hinaus können In-Memory-Downloads auch von Speicherbeschränkungen betroffen sein. Wenn die heruntergeladenen Dateien groß sind, kann es zu Problemen mit unzureichendem Speicher kommen, wodurch die Download-Geschwindigkeit beeinträchtigt wird. Daher müssen Sie bei der Auswahl einer Download-Methode die Vor- und Nachteile je nach Situation abwägen und die am besten geeignete Download-Methode auswählen.
Frageninhalt
Ich verwende aws gosdk, um aus einem bestimmten Bucket herunterzuladen. Nachfolgend finden Sie zwei Implementierungen zum Download
- In Datei herunterladen
func (a *awsclient) downloadtofile(ctx context.context, objectkey string) (string, error) { params := &awss3.getobjectinput{ bucket: aws.string(a.bucket), key: aws.string(objectkey), } downloadpath := "some/valid/path" f, err := os.create(downloadpath) defer f.close() _, err = a.downloader.download(ctx, f, params) return downloadpath, err }
- In den internen Speicher herunterladen
func (a *AwsClient) DownloadToMemory(ctx context.Context, objectKey string) (string, error) { params := &awsS3.GetObjectInput{ Bucket: aws.String(a.bucket), Key: aws.String(objectKey), } buffer := manager.NewWriteAtBuffer([]byte{}) _, err = a.downloader.Download(ctx, buffer, params) return buffer.Bytes(), err }
Bei einer 100-MB-Datei dauert das Herunterladen in den Speicher 30 Sekunden und das Herunterladen in das Dateisystem nur 8 Sekunden. Ich gehe davon aus, dass Speicher-Downloads viel schneller erfolgen sollten. Auf meinem System (Apple M1, Ventura, 8 GB RAM) ist genügend RAM verfügbar, sodass dies kein Problem darstellt. Kann mir jemand helfen, dieses Verhalten zu verstehen?
Workaround
Das Herunterladen großer S3-Objekte in dynamische Puffer ist sehr ineffizient. Der Puffer wurde mehrmals neu zugewiesen, um 100 MB Daten und mehrere Download-Threads zu verarbeiten. Die Neuzuweisung von Speicher erfordert erhebliche CPU-Zeit.
Versuchen Sie, zu Beginn 100 MB zuzuweisen, anstatt Null-Byte-Slices zu verwenden.
Wenn die Objektgröße unbekannt ist, können Sie S3.HeadObject verwenden, um die Objektlänge in Echtzeit zu ermitteln.
Das obige ist der detaillierte Inhalt vonWarum ist das Herunterladen im Speicher langsamer als das Herunterladen im Dateisystem von aws s3?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Der Preis von Bitcoin seit seiner Geburt 2009–2025. Die umfassendste Zusammenfassung der historischen BTC-Preise

Was tun, wenn die Zeit in der unteren rechten Ecke von Windows 11 abgelaufen ist_Was zu tun ist, wenn die Zeit in der unteren rechten Ecke von Windows 11 abgelaufen ist

Gibt es Community-Foren oder Diskussionsgruppen für Java-Funktionen, in denen ich Fragen stellen und darüber diskutieren kann?

So verwenden Sie den Code anderer Leute in Python

Was soll ich tun, wenn die Uhrzeit auf meinem Win11-Computer immer falsch ist? So stellen Sie die falsche Uhrzeit auf einem Windows 11-Computer ein

Häufige Ausnahmetypen und ihre Reparaturmaßnahmen in der Java-Funktionsentwicklung

Kümmert sich niemand um Douyins Zufallskonten? Kann ich ein zweites Mal Berufung einlegen?
