>  기사  >  백엔드 개발  >  aws s3에서 파일 시스템으로 다운로드하는 것보다 메모리로 다운로드하는 것이 느린 이유는 무엇입니까?

aws s3에서 파일 시스템으로 다운로드하는 것보다 메모리로 다운로드하는 것이 느린 이유는 무엇입니까?

王林
王林앞으로
2024-02-09 11:57:29589검색

为什么在内存中下载比从 aws s3 在文件系统中下载慢?

AWS S3에서 파일 시스템으로 다운로드하는 것보다 메모리로 다운로드하는 것이 느린 이유는 무엇입니까? 파일을 다운로드할 때 일반적으로 AWS S3 버킷에서 로컬 파일 시스템으로 다운로드하도록 선택합니다. 그러나 때때로 인메모리 다운로드 방법을 사용하는 것이 S3에서 파일 시스템으로 직접 다운로드하는 것보다 느리다는 것을 알 수 있습니다. 이는 메모리에 다운로드하는 데 몇 가지 추가 단계와 리소스 소비가 필요하기 때문입니다. 첫째, 메모리 내 다운로드에서는 파일 내용을 메모리로 읽은 다음 파일 시스템에 써야 합니다. 이 프로세스에는 추가 메모리 작업 및 IO 작업이 포함되므로 S3에서 파일 시스템으로 직접 다운로드하는 것보다 다운로드 속도가 느려집니다. 또한, 인메모리 다운로드도 메모리 제한의 영향을 받을 수 있습니다. 다운로드한 파일이 큰 경우 메모리 부족 문제가 발생하여 다운로드 속도에 영향을 줄 수 있습니다. 따라서 다운로드 방법을 선택할 때에는 구체적인 상황에 따라 장단점을 잘 따져보고 가장 적합한 다운로드 방법을 선택해야 합니다.

질문 내용

AWS gosdk를 사용하여 특정 버킷에서 다운로드하고 있습니다. 다음은 다운로드를 위한 두 가지 구현입니다

  1. 파일로 다운로드
으아악
  1. 내부 메모리에 다운로드
으아악

100MB 파일의 경우 메모리에 다운로드하는 데 30초가 걸리고 파일 시스템에 다운로드하는 데는 8초만 걸립니다. 내 기대는 메모리 다운로드가 훨씬 빨라야 한다는 것입니다. 내 시스템(apple m1, Ventura, 8GB RAM)에는 사용 가능한 RAM이 충분하므로 이는 문제가 되지 않습니다. 누구든지 이 동작을 이해하도록 도와줄 수 있나요?

해결 방법

대형 S3 객체를 동적 버퍼로 다운로드하는 것은 매우 비효율적입니다. 1억 개의 데이터와 여러 다운로드 스레드를 처리하기 위해 버퍼가 여러 번 재할당되었습니다. 메모리 재할당에는 상당한 CPU 시간이 필요합니다.

널 바이트 슬라이스를 사용하는 대신 처음에 100M을 할당해 보세요.

객체 크기를 알 수 없는 경우 S3.HeadObject를 사용하여 실시간으로 객체 길이를 얻을 수 있습니다.

위 내용은 aws s3에서 파일 시스템으로 다운로드하는 것보다 메모리로 다운로드하는 것이 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제