Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kan jeg bruge en kun fremadrettet læser til store filuploads til S3 i Golang


Kan jeg bruge en kun fremadrettet læser til store filuploads til S3 i Golang


Baseret på søgeresultaterne ser det ud til, at det kan være udfordrende at bruge en læser, der kun er fremadrettet, såsom Go `tar`-læseren, når du uploader store filer til Amazon S3 ved hjælp af AWS SDK for Go.

Nøglepunkterne er:

1. Memory Management Issues: AWS SDK for Go's S3 uploader tildeler og udfylder chunk buffere for hele filen, før de uploades. Dette kan få processen til at løbe tør for hukommelse, når du uploader store filer med en læser, der ikke understøtter 'Seek'- eller 'ReadAt'-funktioner, såsom Go 'tar'-læseren.

2. Intelligent Chunking: GitHub-problemet #1104 antyder, at SDK'et kunne forbedres til at bruge mere intelligent chunking, når beskæftiger sig med læsere, der ikke understøtter `Seek` og `ReadAt`. Dette ville hjælpe med at styre hukommelsesforbruget bedre under upload af store filer.

3. Streaming og multipart-uploads: AWS SDK for Go understøtter streaming og multipart-uploads, som kan hjælpe med at administrere hukommelsesforbrug under upload af store filer. Disse funktioner fungerer dog muligvis ikke så godt med en læser, der kun er fremadrettet.

4. Alternative løsninger: Søgeresultaterne foreslår at bruge Minio SDK eller Google CDK, som muligvis har bedre understøttelse af streaming af store filer til S3. Derudover giver projektet aws-s3-reader-seeker en tilpasset læserimplementering, der kan håndtere store S3-objekter mere effektivt.

Sammenfattende, selvom det er muligt at bruge en fremadrettet læser som Go `tar`-læseren til at uploade store filer til S3 ved hjælp af AWS SDK for Go, er det muligvis ikke den mest effektive eller hukommelsesvenlige tilgang. At overveje alternative løsninger eller bruge SDK's streaming- og multipart-uploadfunktioner kan være en bedre mulighed i sådanne tilfælde.

Citater:
[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