Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Tôi có thể sử dụng trình đọc chỉ chuyển tiếp để tải tệp lớn lên S3 ở Golang không


Tôi có thể sử dụng trình đọc chỉ chuyển tiếp để tải tệp lớn lên S3 ở Golang không


Dựa trên kết quả tìm kiếm, có vẻ như việc sử dụng trình đọc chỉ chuyển tiếp, chẳng hạn như trình đọc Go `tar`, có thể gặp khó khăn khi tải các tệp lớn lên Amazon S3 bằng AWS SDK for Go.

Những điểm chính là:

1. Vấn đề về quản lý bộ nhớ: Trình tải lên S3 của AWS SDK dành cho Go phân bổ và lấp đầy các vùng đệm cho toàn bộ tệp trước khi tải chúng lên. Điều này có thể khiến quá trình hết bộ nhớ khi tải lên các tệp lớn bằng trình đọc không hỗ trợ chức năng `Seek` hoặc `ReadAt`, chẳng hạn như trình đọc Go `tar`.

2. Phân đoạn thông minh: Vấn đề GitHub #1104 cho thấy rằng SDK có thể được cải thiện để sử dụng phân đoạn thông minh hơn khi xử lý các độc giả không hỗ trợ `Seek` và `ReadAt`. Điều này sẽ giúp quản lý việc sử dụng bộ nhớ tốt hơn trong quá trình tải lên tệp lớn.

3. Truyền trực tuyến và tải lên nhiều phần: AWS SDK cho Go hỗ trợ truyền phát trực tuyến và tải lên nhiều phần, có thể giúp quản lý việc sử dụng bộ nhớ trong quá trình tải lên tệp lớn. Tuy nhiên, những tính năng này có thể không hoạt động tốt với đầu đọc chỉ chuyển tiếp.

4. Giải pháp thay thế: Kết quả tìm kiếm đề xuất sử dụng Minio SDK hoặc Google CDK, có thể hỗ trợ tốt hơn cho việc truyền trực tuyến các tệp lớn tới S3. Ngoài ra, dự án aws-s3-reader-seeker còn cung cấp cách triển khai trình đọc tùy chỉnh có thể xử lý các đối tượng S3 lớn hơn một cách hiệu quả.

Tóm lại, mặc dù có thể sử dụng trình đọc chỉ chuyển tiếp như trình đọc Go `tar` để tải các tệp lớn lên S3 bằng AWS SDK cho Go, nhưng đây có thể không phải là cách tiếp cận hiệu quả hoặc thân thiện với bộ nhớ nhất. Việc xem xét các giải pháp thay thế hoặc sử dụng tính năng phát trực tuyến và tải lên nhiều phần của SDK có thể là lựa chọn tốt hơn trong những trường hợp như vậy.

Trích dẫn:
[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_USE_go/
[4] https://www.linkedin.com/pulse/golang-uploading-files-aws-s3-bucket-USE-pre-signed-tiago-melo
[5] https://pkg.go.dev/github.com/SnellerInc/sneller/aws/s3