Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ฉันสามารถใช้ตัวอ่านแบบส่งต่อเท่านั้นสำหรับการอัปโหลดไฟล์ขนาดใหญ่ไปยัง S3 ใน Golang ได้หรือไม่


ฉันสามารถใช้ตัวอ่านแบบส่งต่อเท่านั้นสำหรับการอัปโหลดไฟล์ขนาดใหญ่ไปยัง S3 ใน Golang ได้หรือไม่


จากผลการค้นหา ดูเหมือนว่าการใช้ตัวอ่านแบบส่งต่อเท่านั้น เช่น โปรแกรมอ่าน `tar` ของ Go อาจเป็นเรื่องที่ท้าทายเมื่ออัปโหลดไฟล์ขนาดใหญ่ไปยัง Amazon S3 โดยใช้ AWS SDK for Go

ประเด็นสำคัญคือ:

1. ปัญหาการจัดการหน่วยความจำ: ตัวอัปโหลด S3 ของ AWS SDK for Go จะจัดสรรและเติมบัฟเฟอร์ก้อนสำหรับไฟล์ทั้งหมดก่อนที่จะอัปโหลด ซึ่งอาจทำให้กระบวนการหน่วยความจำไม่เพียงพอเมื่ออัปโหลดไฟล์ขนาดใหญ่ด้วยโปรแกรมอ่านที่ไม่รองรับฟังก์ชัน `Seek` หรือ `ReadAt` เช่น โปรแกรมอ่าน Go `tar`

2. การแยกส่วนอัจฉริยะ: ปัญหา GitHub #1104 แนะนำว่า SDK สามารถปรับปรุงเพื่อใช้การแยกส่วนที่ชาญฉลาดมากขึ้นได้เมื่อ การจัดการกับผู้อ่านที่ไม่รองรับ `Seek` และ `ReadAt` ซึ่งจะช่วยจัดการการใช้หน่วยความจำได้ดีขึ้นในระหว่างการอัพโหลดไฟล์ขนาดใหญ่

3. การสตรีมและการอัปโหลดแบบหลายส่วน: AWS SDK for Go รองรับการสตรีมและการอัปโหลดแบบหลายส่วน ซึ่งสามารถช่วยจัดการการใช้งานหน่วยความจำในระหว่างการอัปโหลดไฟล์ขนาดใหญ่ อย่างไรก็ตาม คุณลักษณะเหล่านี้อาจทำงานได้ไม่ดีนักกับโปรแกรมอ่านแบบส่งต่อเท่านั้น

4. ทางเลือกแก้ไข: ผลการค้นหาแนะนำให้ใช้ Minio SDK หรือ Google CDK ซึ่งอาจรองรับการสตรีมไฟล์ขนาดใหญ่ไปยัง S3 ได้ดีกว่า นอกจากนี้ โปรเจ็กต์ aws-s3-reader-seeker ยังมอบการใช้งานตัวอ่านแบบกำหนดเองที่สามารถรองรับออบเจ็กต์ S3 ขนาดใหญ่ได้มากขึ้น อย่างมีประสิทธิภาพ

โดยสรุป แม้ว่าจะเป็นไปได้ที่จะใช้โปรแกรมอ่านแบบส่งต่อเท่านั้น เช่น โปรแกรมอ่าน `tar` สำหรับการอัปโหลดไฟล์ขนาดใหญ่ไปยัง S3 โดยใช้ AWS SDK for Go แต่อาจไม่ใช่แนวทางที่มีประสิทธิภาพหรือเป็นมิตรกับหน่วยความจำมากที่สุด การพิจารณาโซลูชันทางเลือกหรือใช้คุณลักษณะการสตรีมและการอัปโหลดหลายส่วนของ SDK อาจเป็นตัวเลือกที่ดีกว่าในกรณีเช่นนี้

การอ้างอิง:
[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
-