Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Czy mogę używać czytnika tylko do przesyłania dalej do przesyłania dużych plików do S3 w Golang?


Czy mogę używać czytnika tylko do przesyłania dalej do przesyłania dużych plików do S3 w Golang?


Na podstawie wyników wyszukiwania wydaje się, że korzystanie z czytnika obsługującego tylko przesyłanie dalej, takiego jak czytnik `tar` Go, może stanowić wyzwanie podczas przesyłania dużych plików do Amazon S3 przy użyciu pakietu AWS SDK dla Go.

Kluczowe punkty to:

1. Problemy z zarządzaniem pamięcią: Pakiet AWS SDK dla narzędzia przesyłającego S3 w Go przydziela i wypełnia bufory fragmentów dla całego pliku przed jego przesłaniem. Może to spowodować, że procesowi zabraknie pamięci podczas przesyłania dużych plików za pomocą czytnika, który nie obsługuje funkcji `Seek` lub `ReadAt`, takiego jak czytnik Go `tar`.

2. Inteligentne dzielenie: Problem z GitHubem #1104 sugeruje, że SDK można ulepszyć, tak aby korzystał z bardziej inteligentnego dzielenia na kawałki, gdy radzenie sobie z czytnikami, które nie obsługują funkcji „Seek” i „ReadAt”. Pomogłoby to lepiej zarządzać wykorzystaniem pamięci podczas przesyłania dużych plików.

3. Przesyłanie strumieniowe i przesyłanie wieloczęściowe: Pakiet AWS SDK dla Go obsługuje przesyłanie strumieniowe i przesyłanie wieloczęściowe, co może pomóc w zarządzaniu wykorzystaniem pamięci podczas przesyłania dużych plików. Jednak te funkcje mogą nie działać tak dobrze w przypadku czytnika obsługującego tylko do przodu.

4. Rozwiązania alternatywne: Wyniki wyszukiwania sugerują użycie Minio SDK lub Google CDK, które mogą lepiej obsługiwać przesyłanie strumieniowe dużych plików do S3. Dodatkowo projekt aws-s3-reader-seeker zapewnia niestandardową implementację czytnika, która może obsługiwać duże obiekty S3 więcej wydajnie.

Podsumowując, chociaż możliwe jest użycie czytnika tylko do przodu, takiego jak czytnik tar w Go, do przesyłania dużych plików do S3 przy użyciu AWS SDK dla Go, może to nie być najbardziej wydajne lub przyjazne dla pamięci podejście. W takich przypadkach lepszym rozwiązaniem może być rozważenie alternatywnych rozwiązań lub skorzystanie z funkcji przesyłania strumieniowego i przesyłania wieloczęściowego pakietu SDK.

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