Hakutulosten perusteella näyttää siltä, että vain eteenpäin suuntautuvan lukijan, kuten Go "tar" -lukijan, käyttäminen voi olla haastavaa ladattaessa suuria tiedostoja Amazon S3:een käyttämällä AWS SDK for Go -sovellusta.
Pääkohdat ovat:
1. Muistinhallintaongelmat: Go:n S3-latausohjelman AWS SDK varaa ja täyttää koko tiedoston puskurit ennen niiden lataamista. Tämä voi aiheuttaa prosessin muistin loppumisen, kun lähetät suuria tiedostoja lukijalla, joka ei tue "Seek"- tai "ReadAt"-toimintoja, kuten Go Tar -lukija.
2. Älykäs paloittelu: GitHub-ongelma #1104 viittaa siihen, että SDK:ta voitaisiin parantaa käyttämään älykkäämpää jakamista, kun käsitellä lukijoita, jotka eivät tue "Seek"- ja "ReadAt"-toimintoja. Tämä auttaisi hallitsemaan muistin käyttöä paremmin suurten tiedostojen latauksen aikana.
3. Suoratoisto ja moniosaiset lataukset: AWS SDK for Go tukee suoratoistoa ja moniosaisia latauksia, mikä voi auttaa hallitsemaan muistin käyttöä suurten tiedostojen latauksen aikana. Nämä ominaisuudet eivät kuitenkaan välttämättä toimi yhtä hyvin vain eteenpäin suuntautuvan lukijan kanssa.
4. Vaihtoehtoiset ratkaisut: Hakutuloksissa suositellaan Minio SDK:n tai Google CDK:n käyttöä, joilla voi olla parempi tuki suurten tiedostojen suoratoistolle S3:lle. Lisäksi aws-s3-reader-seeker -projekti tarjoaa mukautetun lukijan toteutuksen, joka pystyy käsittelemään suuria S3-objekteja paremmin tehokkaasti.
Yhteenvetona voidaan todeta, että vaikka on mahdollista käyttää vain eteenpäin suuntautuvaa Go Tar -lukijaa suurten tiedostojen lataamiseen S3:lle Go:n AWS SDK:n avulla, se ei ehkä ole tehokkain tai muistiystävällisin tapa. Vaihtoehtoisten ratkaisujen harkitseminen tai SDK:n suoratoisto- ja moniosaisten latausominaisuuksien käyttö voi olla parempi vaihtoehto tällaisissa tapauksissa.
Lainaukset:[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