Berdasarkan hasil pencarian, tampaknya menggunakan pembaca forward-only, seperti pembaca `tar` Go, dapat menjadi tantangan ketika mengunggah file besar ke Amazon S3 menggunakan AWS SDK for Go.
Poin-poin utamanya adalah:
1. Masalah Manajemen Memori: Pengunggah S3 AWS SDK for Go mengalokasikan dan mengisi buffer potongan untuk seluruh file sebelum mengunggahnya. Hal ini dapat menyebabkan proses kehabisan memori saat mengunggah file besar dengan pembaca yang tidak mendukung fungsi `Seek` atau `ReadAt`, seperti pembaca Go `tar`.
2. Pembagian Cerdas: Masalah GitHub #1104 menunjukkan bahwa SDK dapat ditingkatkan untuk menggunakan pemotongan yang lebih cerdas saat berurusan dengan pembaca yang tidak mendukung `Seek` dan `ReadAt`. Ini akan membantu mengelola penggunaan memori dengan lebih baik selama pengunggahan file besar.
3. Streaming dan Unggahan Multibagian: AWS SDK for Go mendukung streaming dan unggahan multibagian, yang dapat membantu mengelola penggunaan memori selama unggahan file besar. Namun, fitur ini mungkin tidak berfungsi dengan baik pada pembaca yang hanya meneruskan.
4. Solusi Alternatif: Hasil pencarian menyarankan penggunaan Minio SDK atau Google CDK, yang mungkin memiliki dukungan lebih baik untuk streaming file besar ke S3. Selain itu, proyek aws-s3-reader-seeker menyediakan implementasi pembaca khusus yang dapat lebih menangani objek S3 besar efisien.
Singkatnya, meskipun dimungkinkan untuk menggunakan pembaca hanya-depan seperti pembaca `tar` Go untuk mengunggah file besar ke S3 menggunakan AWS SDK for Go, ini mungkin bukan pendekatan yang paling efisien atau ramah memori. Mempertimbangkan solusi alternatif atau menggunakan fitur streaming dan unggahan multibagian dari SDK mungkin merupakan pilihan yang lebih baik dalam kasus seperti itu.
Kutipan:[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