L'SDK AWS per Go gestisce la gestione della memoria durante i caricamenti di file di grandi dimensioni utilizzando una combinazione di tecniche:
1. Streaming: l'SDK utilizza lo streaming per caricare file di grandi dimensioni, il che significa che suddivide il file in blocchi più piccoli e carica ogni blocco separatamente. Questo approccio aiuta a ridurre l'utilizzo della memoria caricando in memoria solo una piccola parte del file alla volta[4].
2. Caricamenti in più parti: l'SDK supporta anche caricamenti in più parti, che consentono di caricare file di grandi dimensioni dividendoli in parti più piccole e caricando ciascuna parte separatamente. Questo approccio aiuta a gestire l'utilizzo della memoria caricando in memoria solo una piccola parte del file alla volta[3].
3. Chunking: l'SDK utilizza il Chunking per gestire l'utilizzo della memoria durante il caricamento di file di grandi dimensioni. Divide il file in parti più piccole e carica ciascuna parte separatamente. Questo approccio aiuta a ridurre l'utilizzo della memoria caricando in memoria solo una piccola parte del file alla volta[3].
4. Concorrenza: l'SDK supporta la concorrenza, il che significa che può caricare più parti del file contemporaneamente. Questo approccio aiuta a migliorare le prestazioni di caricamento e a ridurre l'utilizzo della memoria distribuendo il carico su più goroutine[1].
5. Buffering: l'SDK utilizza il buffering per gestire l'utilizzo della memoria durante il caricamento di file di grandi dimensioni. Mette nel buffer i dati del file in memoria e quindi li carica in blocchi. Questo approccio aiuta a ridurre l'utilizzo della memoria caricando in memoria solo una piccola parte del file alla volta[1].
Utilizzando queste tecniche, l'SDK AWS per Go può gestire in modo efficiente caricamenti di file di grandi dimensioni gestendo al tempo stesso in modo efficace l'utilizzo della memoria.
Citazioni:[1] https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/s3-example-basic-bucket-operazioni.html
[2] https://www.youtube.com/watch?v=R6W1ay4jYKk
[3] https://github.com/aws/aws-sdk-go/issues/1104
[4] https://stackoverflow.com/questions/34177137/stream-file-upload-to-aws-s3-using-go
[5] https://www.youtube.com/watch?v=HkF3_GLVKEg