Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Posso utilizzare un lettore di sola inoltro per caricamenti di file di grandi dimensioni su S3 in Golang


Posso utilizzare un lettore di sola inoltro per caricamenti di file di grandi dimensioni su S3 in Golang


In base ai risultati della ricerca, sembra che l'utilizzo di un lettore forward-only, come il lettore Go `tar`, possa essere complicato quando si caricano file di grandi dimensioni su Amazon S3 utilizzando l'SDK AWS per Go.

I punti chiave sono:

1. Problemi di gestione della memoria: l'uploader S3 di AWS SDK for Go alloca e riempie i buffer dei blocchi per l'intero file prima di caricarli. Ciò può causare l'esaurimento della memoria del processo durante il caricamento di file di grandi dimensioni con un lettore che non supporta le funzioni "Seek" o "ReadAt", come il lettore Go "tar".

2. Chunking intelligente: il problema di GitHub #1104 suggerisce che l'SDK potrebbe essere migliorato per utilizzare un Chunking più intelligente quando trattare con lettori che non supportano `Seek` e `ReadAt`. Ciò aiuterebbe a gestire meglio l'utilizzo della memoria durante i caricamenti di file di grandi dimensioni.

3. Streaming e caricamenti in più parti: AWS SDK for Go supporta lo streaming e i caricamenti in più parti, che possono aiutare a gestire l'utilizzo della memoria durante i caricamenti di file di grandi dimensioni. Tuttavia, queste funzionalità potrebbero non funzionare altrettanto bene con un lettore forward-only.

4. Soluzioni alternative: i risultati della ricerca suggeriscono di utilizzare Minio SDK o Google CDK, che potrebbero offrire un supporto migliore per lo streaming di file di grandi dimensioni su S3. Inoltre, il progetto aws-s3-reader-seeker fornisce un'implementazione di lettore personalizzata in grado di gestire oggetti S3 di grandi dimensioni. in modo efficiente.

In sintesi, sebbene sia possibile utilizzare un lettore forward-only come il lettore "tar" Go per caricare file di grandi dimensioni su S3 utilizzando l'SDK AWS per Go, potrebbe non essere l'approccio più efficiente o di facile utilizzo della memoria. In questi casi, prendere in considerazione soluzioni alternative o utilizzare le funzionalità di streaming e caricamento in più parti dell'SDK potrebbe essere un'opzione migliore.

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