Inhaltsverzeichnis
Frageninhalt
Workaround
Heim Backend-Entwicklung Golang 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?

Feb 09, 2024 am 11:57 AM
overflow

为什么在内存中下载比从 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

  1. 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
}
Nach dem Login kopieren
  • 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
    }
    Nach dem Login kopieren

    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!

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heißer Artikel

    R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
    2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    Repo: Wie man Teamkollegen wiederbelebt
    4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Der Preis von Bitcoin seit seiner Geburt 2009–2025. Die umfassendste Zusammenfassung der historischen BTC-Preise Der Preis von Bitcoin seit seiner Geburt 2009–2025. Die umfassendste Zusammenfassung der historischen BTC-Preise Jan 15, 2025 pm 08:11 PM

    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 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 May 06, 2024 pm 01:20 PM

    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? Gibt es Community-Foren oder Diskussionsgruppen für Java-Funktionen, in denen ich Fragen stellen und darüber diskutieren kann? Apr 28, 2024 pm 02:12 PM

    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 So verwenden Sie den Code anderer Leute in Python May 05, 2024 pm 07:54 PM

    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 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 May 03, 2024 pm 09:20 PM

    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 Häufige Ausnahmetypen und ihre Reparaturmaßnahmen in der Java-Funktionsentwicklung May 03, 2024 pm 02:09 PM

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

    Was bedeutet Überlauf in CSS? Was bedeutet Überlauf in CSS? Apr 28, 2024 pm 03:15 PM

    Was bedeutet Überlauf in CSS?

    Kümmert sich niemand um Douyins Zufallskonten? Kann ich ein zweites Mal Berufung einlegen? Kümmert sich niemand um Douyins Zufallskonten? Kann ich ein zweites Mal Berufung einlegen? May 03, 2024 am 09:37 AM

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

    See all articles