Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Могу ли я использовать программу чтения только для прямой загрузки для загрузки больших файлов на S3 в Golang?


Могу ли я использовать программу чтения только для прямой загрузки для загрузки больших файлов на S3 в Golang?


Основываясь на результатах поиска, кажется, что использование прямого чтения, такого как Go `tar` Reader, может оказаться затруднительным при загрузке больших файлов в Amazon S3 с использованием AWS SDK для Go.

Ключевые моменты:

1. Проблемы с управлением памятью. AWS SDK для средства загрузки S3 Go выделяет и заполняет буферы фрагментов для всего файла перед его загрузкой. Это может привести к тому, что процессу не хватит памяти при загрузке больших файлов с помощью программы чтения, которая не поддерживает функции `Seek` или `ReadAt`, например, Go `tar` Reader.

2. Интеллектуальное разбиение: проблема GitHub #1104 предполагает, что SDK можно улучшить, чтобы использовать более интеллектуальное разбиение на фрагменты, когда работа с читателями, которые не поддерживают `Seek` и `ReadAt`. Это поможет лучше управлять использованием памяти при загрузке больших файлов.

3. Потоковая передача и многочастная загрузка. AWS SDK для Go поддерживает потоковую и многочастную загрузку, что помогает управлять использованием памяти во время загрузки больших файлов. Однако эти функции могут не работать так же хорошо при прямом чтении.

4. Альтернативные решения. Результаты поиска предлагают использовать Minio SDK или Google CDK, которые могут лучше поддерживать потоковую передачу больших файлов на S3. Кроме того, проект aws-s3-reader-seeker предоставляет специальную реализацию чтения, которая может обрабатывать большие объекты S3. эффективно.

Подводя итог, можно сказать, что хотя для загрузки больших файлов на S3 с помощью AWS SDK для Go можно использовать программу чтения только для прямой передачи, такую ​​​​как Go `tar` Reader, это может быть не самый эффективный и экономичный подход. В таких случаях лучшим вариантом может быть рассмотрение альтернативных решений или использование функций потоковой передачи и многочастной загрузки 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