Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ¿Puedo usar un lector de solo avance para cargar archivos grandes a S3 en Golang?


¿Puedo usar un lector de solo avance para cargar archivos grandes a S3 en Golang?


Según los resultados de la búsqueda, parece que usar un lector de solo avance, como el lector Go `tar`, puede ser un desafío al cargar archivos grandes en Amazon S3 usando AWS SDK for Go.

Los puntos clave son:

1. Problemas de administración de memoria: el cargador S3 de AWS SDK para Go asigna y llena búferes de fragmentos para todo el archivo antes de cargarlos. Esto puede hacer que el proceso se quede sin memoria al cargar archivos grandes con un lector que no admite las funciones `Seek` o `ReadAt`, como el lector Go `tar`.

2. Fragmentación inteligente: el problema de GitHub #1104 sugiere que el SDK podría mejorarse para utilizar una fragmentación más inteligente cuando tratar con lectores que no admiten `Seek` y `ReadAt`. Esto ayudaría a administrar mejor el uso de la memoria durante la carga de archivos grandes.

3. Transmisión y cargas de varias partes: AWS SDK for Go admite transmisiones y cargas de varias partes, lo que puede ayudar a administrar el uso de la memoria durante la carga de archivos grandes. Sin embargo, es posible que estas funciones no funcionen tan bien con un lector de sólo avance.

4. Soluciones alternativas: Los resultados de la búsqueda sugieren usar Minio SDK o Google CDK, que pueden tener mejor soporte para transmitir archivos grandes a S3. Además, el proyecto aws-s3-reader-seeker proporciona una implementación de lector personalizada que puede manejar objetos S3 grandes con mayor precisión. eficientemente.

En resumen, si bien es posible utilizar un lector de solo avance como el lector "tar" de Go para cargar archivos grandes a S3 utilizando el SDK de AWS para Go, puede que no sea el enfoque más eficiente ni el más amigable con la memoria. En tales casos, considerar soluciones alternativas o utilizar las funciones de transmisión y carga multiparte del SDK puede ser una mejor opción.

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