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ß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 jüngste Preis für Bitcoin in den Jahren 2018-2024 USD Der jüngste Preis für Bitcoin in den Jahren 2018-2024 USD Feb 15, 2025 pm 07:12 PM

    Echtzeit-Bitcoin-USD-Preis Faktoren, die den Bitcoin -Preis beeinflussen Indikatoren für die Vorhersage zukünftiger Bitcoin -Preise Hier finden Sie einige wichtige Informationen zum Preis von Bitcoin in den Jahren 2018-2024:

    Ist die H5-Seitenproduktion eine Front-End-Entwicklung? Ist die H5-Seitenproduktion eine Front-End-Entwicklung? Apr 05, 2025 pm 11:42 PM

    Ja, die H5-Seitenproduktion ist eine wichtige Implementierungsmethode für die Front-End-Entwicklung, die Kerntechnologien wie HTML, CSS und JavaScript umfasst. Entwickler bauen dynamische und leistungsstarke H5 -Seiten auf, indem sie diese Technologien geschickt kombinieren, z. B. die Verwendung der & lt; canvas & gt; Tag, um Grafiken zu zeichnen oder JavaScript zu verwenden, um das Interaktionsverhalten zu steuern.

    Wie kann man das Größensymbol durch CSS anpassen und es mit der Hintergrundfarbe einheitlich machen? Wie kann man das Größensymbol durch CSS anpassen und es mit der Hintergrundfarbe einheitlich machen? Apr 05, 2025 pm 02:30 PM

    Die Methode zur Anpassung der Größe der Größe der Größe der Größe in CSS ist mit Hintergrundfarben einheitlich. In der täglichen Entwicklung begegnen wir häufig Situationen, in denen wir die Details der Benutzeroberfläche wie Anpassung anpassen müssen ...

    Warum sind die Inline-Block-Elemente falsch ausgerichtet? Wie löst ich dieses Problem? Warum sind die Inline-Block-Elemente falsch ausgerichtet? Wie löst ich dieses Problem? Apr 04, 2025 pm 10:39 PM

    In Bezug auf die Gründe und Lösungen für falsch ausgerichtete Darstellung von Inline-Block-Elementen. Beim Schreiben von Webseitenlayout stoßen wir oft auf einige scheinbar seltsame Anzeigenprobleme. Vergleichen...

    Wie steuern Sie die obere und das Ende der Seiten in den Browser -Druckeinstellungen über JavaScript oder CSS? Wie steuern Sie die obere und das Ende der Seiten in den Browser -Druckeinstellungen über JavaScript oder CSS? Apr 05, 2025 pm 10:39 PM

    So verwenden Sie JavaScript oder CSS, um die obere und das Ende der Seite in den Druckeinstellungen des Browsers zu steuern. In den Druckeinstellungen des Browsers gibt es eine Option, um zu steuern, ob das Display ist ...

    Der Text unter Flex -Layout wird weggelassen, aber der Behälter wird geöffnet? Wie löst ich es? Der Text unter Flex -Layout wird weggelassen, aber der Behälter wird geöffnet? Wie löst ich es? Apr 05, 2025 pm 11:00 PM

    Das Problem der Containeröffnung aufgrund einer übermäßigen Auslassung von Text unter Flex -Layout und Lösungen werden verwendet ...

    Wie verwendet ich das Clip-Pfad-Attribut von CSS, um den 45-Grad-Kurveneffekt des Segmenters zu erreichen? Wie verwendet ich das Clip-Pfad-Attribut von CSS, um den 45-Grad-Kurveneffekt des Segmenters zu erreichen? Apr 04, 2025 pm 11:45 PM

    Wie kann man den 45-Grad-Kurveneffekt des Segmenters erreichen? Bei der Implementierung des Segmenters verwandeln Sie den rechten Rand in eine 45-Grad-Kurve, wenn Sie auf die linke Schaltfläche klicken, und der Punkt ...

    Wie kann man Segmentierungseffekt mit einer 45 -Grad -Kurvenrandung erreichen? Wie kann man Segmentierungseffekt mit einer 45 -Grad -Kurvenrandung erreichen? Apr 04, 2025 pm 11:48 PM

    Tipps zur Implementierung von Segmentierereffekten im Design der Benutzeroberfläche sind Segmentierer ein gemeinsames Navigationselement, insbesondere in mobilen Anwendungen und reaktionsschnellen Webseiten. ...

    See all articles