Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Posso usar um leitor somente de encaminhamento para uploads de arquivos grandes para S3 em Golang?


Posso usar um leitor somente de encaminhamento para uploads de arquivos grandes para S3 em Golang?


Com base nos resultados da pesquisa, parece que usar um leitor somente de encaminhamento, como o leitor Go `tar`, pode ser um desafio ao fazer upload de arquivos grandes para o Amazon S3 usando o AWS SDK for Go.

Os pontos principais são:

1. Problemas de gerenciamento de memória: o carregador S3 do AWS SDK for Go aloca e preenche buffers de blocos para o arquivo inteiro antes de carregá-los. Isso pode fazer com que o processo fique sem memória ao enviar arquivos grandes com um leitor que não suporta funções `Seek` ou `ReadAt`, como o leitor Go `tar`.

2. Intelligent Chunking: o problema do GitHub #1104 sugere que o SDK poderia ser melhorado para usar chunking mais inteligente quando lidando com leitores que não suportam `Seek` e `ReadAt`. Isso ajudaria a gerenciar melhor o uso de memória durante uploads de arquivos grandes.

3. Streaming e multipart uploads: o AWS SDK for Go oferece suporte a streaming e multipart uploads, o que pode ajudar a gerenciar o uso de memória durante uploads de arquivos grandes. No entanto, esses recursos podem não funcionar tão bem com um leitor somente de encaminhamento.

4. Soluções alternativas: os resultados da pesquisa sugerem o uso do Minio SDK ou do Google CDK, que pode ter melhor suporte para streaming de arquivos grandes para S3. Além disso, o projeto aws-s3-reader-seeker fornece uma implementação de leitor personalizada que pode lidar mais com objetos grandes do S3. eficientemente.

Em resumo, embora seja possível usar um leitor somente de encaminhamento, como o leitor Go `tar` para fazer upload de arquivos grandes para o S3 usando o AWS SDK for Go, essa pode não ser a abordagem mais eficiente ou com melhor memória. Considerar soluções alternativas ou usar os recursos de streaming e multipart upload do SDK pode ser uma opção melhor nesses casos.

Citações:
[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