1
그래서 Amazon S3에서 파일을 다운로드하는 다음과 같은 방법이 있습니다. 현재는 작동하고 있지만 앞으로는 상당히 큰 파일 (2-3 기가 바이트)을 처리해야 할 것으로 예상됩니다. 그렇다면 어떤 성능 최적화를 권하고 싶습니까? 또한 Java에서 파일 I/O에 대한 일반적인 아이디어와 관련된 링크는 제 사례뿐 아니라 일반적으로 많이 도움이 될 것입니다.파일 다운로드 최적화
public static void fetchFileFromS3(String filePath, String outPath) {
int size = 5 * 1024 * 1024; //use 5 megabytes buffers
byte bufSize[] = new byte[size];
FileOutputStream fout = null;
BufferedOutputStream bufOut = null;
BufferedInputStream bufIn = null;
String[] result = getRealPath(filePath);
S3Object object = Utilities.getS3Instance().getObject(new GetObjectRequest(result[0], result[1]));
try {
fout = new FileOutputStream(outPath);
bufOut = new BufferedOutputStream(fout, size);
bufIn = new BufferedInputStream(object.getObjectContent(), size);
int bytesRead = 0;
while((bytesRead = bufIn.read(bufSize)) != -1) {
bufOut.write(bufSize, 0, bytesRead);
}
System.out.println("Finished downloading file");
bufOut.flush();
bufOut.close();
bufIn.close();
} catch (IOException ex) {
Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, null, ex);
}
}
다운로드 속도 나 디스크 속도가 병목 현상인지 여부를 알 수 있습니까? 많은 경우, 후자는 첫 번째 문제보다 훨씬 덜 중요한 문제이므로 더 많은 대역폭을 확보하는 대신 할 일이별로 없습니다. –
글쎄, 링크가 10GE이고 디스크가 거대한 디스크 배열이기 때문에 둘 다 경합이 없을 때 병목이 아닙니다. 이 경우 코드에 병목 현상이 생기지 않도록 더 궁금해했습니다. – LordDoskias