Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Μπορώ να χρησιμοποιήσω έναν αναγνώστη μόνο προς τα εμπρός για μεταφορτώσεις μεγάλων αρχείων στο S3 στο Golang


Μπορώ να χρησιμοποιήσω έναν αναγνώστη μόνο προς τα εμπρός για μεταφορτώσεις μεγάλων αρχείων στο S3 στο Golang


Με βάση τα αποτελέσματα αναζήτησης, φαίνεται ότι η χρήση ενός προγράμματος ανάγνωσης μόνο προς τα εμπρός, όπως ο αναγνώστης Go `tar`, μπορεί να είναι δύσκολη κατά τη μεταφόρτωση μεγάλων αρχείων στο Amazon S3 χρησιμοποιώντας το AWS SDK for Go.

Τα βασικά σημεία είναι:

1. Προβλήματα διαχείρισης μνήμης: Το AWS SDK για το πρόγραμμα μεταφόρτωσης S3 της Go εκχωρεί και γεμίζει buffer τμημάτων για ολόκληρο το αρχείο πριν από τη μεταφόρτωσή τους. Αυτό μπορεί να προκαλέσει εξάντληση της μνήμης της διαδικασίας κατά τη μεταφόρτωση μεγάλων αρχείων με πρόγραμμα ανάγνωσης που δεν υποστηρίζει τις λειτουργίες «Αναζήτηση» ή «ReadAt», όπως ο αναγνώστης Go «tar».

2. Έξυπνο τεμάχιο: Το ζήτημα του GitHub #1104 υποδηλώνει ότι το SDK θα μπορούσε να βελτιωθεί ώστε να χρησιμοποιεί πιο έξυπνο τεμάχιο όταν ασχολείται με αναγνώστες που δεν υποστηρίζουν τα «Seek» και «ReadAt». Αυτό θα βοηθούσε στη διαχείριση της χρήσης της μνήμης καλύτερα κατά τη μεταφόρτωση μεγάλων αρχείων.

3. Μεταφορτώσεις ροής και πολλαπλών μερών: Το AWS SDK for Go υποστηρίζει μεταφορτώσεις ροής και πολλαπλών τμημάτων, οι οποίες μπορούν να βοηθήσουν στη διαχείριση της χρήσης μνήμης κατά τη διάρκεια μεταφορτώσεων μεγάλων αρχείων. Ωστόσο, αυτές οι δυνατότητες ενδέχεται να μην λειτουργούν το ίδιο καλά με έναν αναγνώστη μόνο προς τα εμπρός.

4. Εναλλακτικές λύσεις: Τα αποτελέσματα αναζήτησης προτείνουν τη χρήση του Minio SDK ή του Google CDK, τα οποία μπορεί να έχουν καλύτερη υποστήριξη για ροή μεγάλων αρχείων στο S3. Επιπλέον, το έργο aws-s3-reader-seeker παρέχει μια προσαρμοσμένη εφαρμογή αναγνώστη που μπορεί να χειριστεί μεγαλύτερα αντικείμενα S3 αποτελεσματικά.

Συνοπτικά, αν και είναι δυνατό να χρησιμοποιηθεί ένας αναγνώστης μόνο προς τα εμπρός, όπως ο αναγνώστης Go `tar` για τη μεταφόρτωση μεγάλων αρχείων στο S3 χρησιμοποιώντας το AWS SDK for Go, μπορεί να μην είναι η πιο αποτελεσματική ή φιλική προς τη μνήμη προσέγγιση. Η εξέταση εναλλακτικών λύσεων ή η χρήση των δυνατοτήτων ροής και μεταφόρτωσης πολλαπλών μερών του 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