Rumah > pembangunan bahagian belakang > Golang > Mengapa memuat turun dalam memori lebih perlahan daripada memuat turun dalam sistem fail daripada aws s3?

Mengapa memuat turun dalam memori lebih perlahan daripada memuat turun dalam sistem fail daripada aws s3?

王林
Lepaskan: 2024-02-09 11:57:29
ke hadapan
613 orang telah melayarinya

为什么在内存中下载比从 aws s3 在文件系统中下载慢?

Mengapa memuat turun dalam memori lebih perlahan daripada memuat turun dalam sistem fail daripada AWS S3? Apabila memuat turun fail, kami biasanya memilih untuk memuat turun daripada baldi AWS S3 ke sistem fail tempatan. Walau bagaimanapun, kadangkala kami mendapati bahawa menggunakan kaedah muat turun dalam memori adalah lebih perlahan daripada memuat turun terus dari S3 ke sistem fail. Ini kerana memuat turun dalam ingatan melibatkan beberapa langkah tambahan dan penggunaan sumber. Mula-mula, muat turun dalam memori memerlukan membaca kandungan fail ke dalam memori dan kemudian menulisnya ke sistem fail. Proses ini melibatkan operasi memori tambahan dan operasi IO, yang akan menyebabkan kelajuan muat turun menjadi lebih perlahan daripada memuat turun terus dari S3 ke sistem fail. Selain itu, muat turun dalam memori juga mungkin dipengaruhi oleh had memori Apabila fail yang dimuat turun adalah besar, ia mungkin menyebabkan masalah ingatan yang tidak mencukupi, sekali gus menjejaskan kelajuan muat turun. Oleh itu, apabila memilih kaedah muat turun, anda perlu menimbang kebaikan dan keburukan mengikut situasi tertentu dan memilih kaedah yang paling sesuai untuk memuat turun.

Kandungan soalan

Saya menggunakan aws gosdk untuk memuat turun daripada baldi tertentu. Di bawah ialah dua pelaksanaan untuk dimuat turun

  1. Muat turun ke fail
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
}
Salin selepas log masuk
  • Muat turun ke memori dalaman
  • 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
    }
    Salin selepas log masuk

    Untuk fail 100 mb, ia mengambil masa 30 saat untuk memuat turun ke memori dan hanya 8 saat untuk memuat turun ke sistem fail. Jangkaan saya ialah muat turun memori sepatutnya lebih pantas. Sistem saya (epal m1, ventura, ram 8gb) mempunyai ram yang mencukupi, jadi ini bukan masalah. Bolehkah sesiapa membantu saya memahami tingkah laku ini?

    Penyelesaian

    Memuat turun objek S3 yang besar ke dalam penimbal dinamik adalah sangat tidak cekap. Penampan telah diperuntukkan semula beberapa kali untuk mengendalikan 100M data dan berbilang urutan muat turun. Pengagihan semula memori memerlukan masa CPU yang ketara.

    Cuba peruntukkan 100M pada permulaan dan bukannya menggunakan kepingan bait nol.

    Jika saiz objek tidak diketahui, anda boleh menggunakan S3.HeadObject untuk mendapatkan panjang objek dalam masa nyata.

    Atas ialah kandungan terperinci Mengapa memuat turun dalam memori lebih perlahan daripada memuat turun dalam sistem fail daripada aws s3?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:stackoverflow.com
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan