Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kann ich einen Nur-Vorwärts-Reader für das Hochladen großer Dateien auf S3 in Golang verwenden?


Kann ich einen Nur-Vorwärts-Reader für das Hochladen großer Dateien auf S3 in Golang verwenden?


Basierend auf den Suchergebnissen scheint es, dass die Verwendung eines Nur-Vorwärts-Readers, wie z. B. des „Tar“-Readers von Go, beim Hochladen großer Dateien auf Amazon S3 mit dem AWS SDK for Go eine Herausforderung darstellen kann.

Die wichtigsten Punkte sind:

1. Probleme bei der Speicherverwaltung: Der S3-Uploader des AWS SDK for Go weist Chunk-Puffer für die gesamte Datei zu und füllt sie, bevor er sie hochlädt. Dies kann dazu führen, dass dem Prozess nicht mehr genügend Arbeitsspeicher zur Verfügung steht, wenn große Dateien mit einem Reader hochgeladen werden, der die Funktionen „Seek“ oder „ReadAt“ nicht unterstützt, wie z. B. der „tar“-Reader von Go.

2. Intelligentes Chunking: Das GitHub-Problem #1104 legt nahe, dass das SDK verbessert werden könnte, um intelligenteres Chunking zu verwenden Umgang mit Readern, die „Seek“ und „ReadAt“ nicht unterstützen. Dies würde dazu beitragen, die Speichernutzung beim Hochladen großer Dateien besser zu verwalten.

3. Streaming und mehrteilige Uploads: Das AWS SDK for Go unterstützt Streaming und mehrteilige Uploads, was bei der Verwaltung der Speichernutzung beim Hochladen großer Dateien helfen kann. Bei einem Nur-Vorwärts-Lesegerät funktionieren diese Funktionen jedoch möglicherweise nicht so gut.

4. Alternative Lösungen: Die Suchergebnisse schlagen die Verwendung des Minio SDK oder des Google CDK vor, die möglicherweise eine bessere Unterstützung für das Streamen großer Dateien nach S3 bieten. Darüber hinaus bietet das Projekt aws-s3-reader-seeker eine benutzerdefinierte Reader-Implementierung, die große S3-Objekte besser verarbeiten kann effizient.

Zusammenfassend lässt sich sagen, dass es zwar möglich ist, einen Nur-Vorwärts-Reader wie den Go-„tar“-Reader zum Hochladen großer Dateien nach S3 mit dem AWS SDK for Go zu verwenden, dies ist jedoch möglicherweise nicht der effizienteste oder speicherschonendste Ansatz. In solchen Fällen kann es eine bessere Option sein, alternative Lösungen in Betracht zu ziehen oder die Streaming- und Multipart-Upload-Funktionen des SDK zu nutzen.

Zitate:
[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