Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Használhatok-e csak továbbító olvasót nagy fájlok feltöltéséhez az S3-ba Golangban?


Használhatok-e csak továbbító olvasót nagy fájlok feltöltéséhez az S3-ba Golangban?


A keresési eredmények alapján úgy tűnik, hogy a csak továbbító olvasó, például a Go tar olvasó használata kihívást jelenthet, ha nagy fájlokat tölt fel az Amazon S3-ra az AWS SDK for Go használatával.

A legfontosabb pontok a következők:

1. Memóriakezelési problémák: A Go S3 feltöltőjéhez készült AWS SDK lefoglalja és feltölti a teljes fájl puffereit, mielőtt feltölti őket. Emiatt előfordulhat, hogy a folyamat memóriája elfogy, amikor nagy fájlokat tölt fel olyan olvasóval, amely nem támogatja a „Seek” vagy „ReadAt” funkciókat, például a Go „tar” olvasóval.

2. Intelligens darabolás: A GitHub-probléma #1104 azt sugallja, hogy az SDK-t tovább lehetne fejleszteni, hogy intelligensebb darabolást használjon, amikor olyan olvasókkal foglalkozik, amelyek nem támogatják a "Seek" és a "ReadAt" funkciót. Ez segít jobban kezelni a memóriahasználatot nagy fájlok feltöltésekor.

3. Streaming és többrészes feltöltés: Az AWS SDK for Go támogatja a streamelést és a többrészes feltöltést, ami segíthet a memóriahasználat kezelésében nagy fájlfeltöltések során. Előfordulhat azonban, hogy ezek a funkciók nem működnek olyan jól a csak továbbító olvasóval.

4. Alternatív megoldások: A keresési eredmények a Minio SDK vagy a Google CDK használatát javasolják, amelyek esetleg jobban támogatják a nagy fájlok S3-ba való streamelését. Ezenkívül az aws-s3-reader-seeker projekt olyan egyéni olvasói megvalósítást biztosít, amely jobban kezeli a nagy S3 objektumokat hatékonyan.

Összefoglalva, bár lehetséges egy csak továbbító olvasó, például a Go tar olvasó nagy fájlok feltöltésére az S3-ba az AWS SDK for Go használatával, nem biztos, hogy ez a leghatékonyabb vagy memóriabarát megközelítés. Ilyen esetekben jobb megoldás lehet alternatív megoldások megfontolása vagy az SDK streaming és többrészes feltöltési funkcióinak használata.

Idézetek:
[1] https://github.com/aws/aws-sdk-go/issues/1104
[2] https://github.com/nikolaydubina/aws-s3-reader/blob/master/aws_s3_reader_seeker.go
[3] https://www.reddit.com/r/golang/comments/131bq42/need_to_stream_large_files_to_s3_using_go/
[4] https://www.linkedin.com/pulse/golang-uploading-files-aws-s3-bucket-using-pre-signed-tiago-melo
[5] https://pkg.go.dev/github.com/SnellerInc/sneller/aws/s3