AWS SDK for Go は、次の手法を組み合わせて、大きなファイルのアップロード中のメモリ管理を処理します。
1. ストリーミング: SDK はストリーミングを使用して大きなファイルをアップロードします。つまり、ファイルを小さなチャンクに分割し、各チャンクを個別にアップロードします。このアプローチは、一度にファイルのごく一部のみをメモリにロードすることにより、メモリ使用量を削減するのに役立ちます[4]。
2. マルチパート アップロード: SDK はマルチパート アップロードもサポートしています。これにより、大きなファイルを小さな部分に分割し、各部分を個別にアップロードすることができます。このアプローチは、一度にファイルのごく一部のみをメモリにロードすることでメモリ使用量を管理するのに役立ちます[3]。
3. チャンキング: SDK はチャンキングを使用して、大きなファイルのアップロード中のメモリ使用量を管理します。ファイルを小さなチャンクに分割し、各チャンクを個別にアップロードします。このアプローチは、一度にファイルのごく一部のみをメモリにロードすることで、メモリ使用量を削減するのに役立ちます[3]。
4. 同時実行: SDK は同時実行をサポートしています。つまり、ファイルの複数のチャンクを同時にアップロードできます。このアプローチは、複数のゴルーチンに負荷を分散することで、アップロードのパフォーマンスを向上させ、メモリ使用量を削減するのに役立ちます[1]。
5. バッファリング: SDK はバッファリングを使用して、大きなファイルのアップロード中のメモリ使用量を管理します。ファイル データをメモリにバッファリングし、チャンクに分けてアップロードします。このアプローチは、一度にファイルのごく一部のみをメモリにロードすることで、メモリ使用量を削減するのに役立ちます[1]。
これらのテクニックを使用することで、AWS SDK for Go はメモリ使用量を効果的に管理しながら、大きなファイルのアップロードを効率的に処理できます。
引用:[1] https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/s3-example-basic-bucket-operations.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