2017-10-11 2 views
0

Google 드라이브에 약 50 만 개의 파일을 다른 폴더에 복사해야하는 프로그램이 있습니다. 나는 Google 드라이브 v3 nodejs api를 사용합니다. 나는 초당 약 2 개의 업로드 (450ms마다)를 발행한다. 잠시 후 ECONNRESET을 받거나 API에서 소켓이 끊어집니다.Google 드라이브 나머지 API - 파일 만들기 - 할당량

console.cloud.google.com에서 할당량을 볼 때. 나는 내 쿼터 근처에 없다. 왜 실패 하는가?

킥의 경우 Google 파일 스트림을 시도했지만 사용자 계정의 드라이브에 문제가 없습니다. 약 5 배 빠릅니다.

누구에게이 문제가 발생 했습니까?

+0

거기에 http 오류 상태가 있습니까? 당신은 특히 304 Rate Exceeded 오류 – pinoyyid

+0

을 찾고 있습니다. ECONNRESET : 소켓 끊기는 내가 얻은 오류입니다. 나는 초과 된 비율에 익숙하다. 저는 두 단계의 과정을 밟았습니다. 하나는 디렉토리를 만들고, 다른 하나는 파일을 만듭니다. 첫 번째 단계에서는 초당 약 5 개의 디렉토리를 제공합니다. 나는 지수 백 오프를 구현 한 스로틀 백을 얻었습니다.이 경우 단순히 위의 오류 일뿐입니다 ... –

+0

. 나는 모른다. 익스프레스 백 오프는 스로틀 링을 구현하는 이상적인 알고리즘과는 거리가 멀다. 최대 처리량을 위해서는 적응 형 백 오프를 구현해야합니다. – pinoyyid

답변

0

할당량 자체가 문제가 아닌 것 같습니다. 이것은 짧은 시간 내에 많은 양의 데이터를 쓸 때 발생합니다. 속도를 늦추고 여러 사용자 계정에서 요청을 분할 해보십시오. 이것은 수행중인 많은 요청이 무거워 지도록 도와줍니다. 또한 4xx 오류 재 시도를 위해 exponential backoff을 구현하는 것을 잊지 마십시오. 내 두 센트.

+0

파일 크기는 대개 2kb입니다. 완료하려면 약 1 초가 걸리므로 빠른 속도를 얻으려고합니다. 또한 파일 메이커 (오래된 화신의 Google 드라이브)는 훨씬 빠르게 처리하는 것으로 보입니다. Google 드라이브 폴더에 저장하면 4 일 동안 약 16 시간이 소요됩니다. 그것이 내가 설명 할 수없는 부분입니다. 지수 시간을 구현했습니다. 그러나 어떤 경우에는 Google이 실패로 돌아 오는 데 몇 초가 걸립니다. 그래서 구글이 아니오라고 말하면서, 나는 이미 10 개의 파일 (초당 3 파일)을 보냈습니다 ... 10 초 동안 스로틀하기 때문에 결국에는 연속적으로 변합니다. –

0

이는 스트림 전달을 호출 할 때 발생합니다. developers.google.com에는 경고가 없지만 github repository에 경고가 표시됩니다.

media.body를 읽기 가능 스트림으로 지정하여 미디어를 업로드 할 수도 있습니다. 이렇게하면 메모리에 저장할 수없는 매우 큰 파일을 업로드 할 수 있습니다.

참고 : 읽을 수있는 스트림이 불안정 할 수 있습니다. 자신의 책임하에 사용하십시오.

일단 스트림을 사용하지 않도록 변경하면 상태 코드 403과 같은 적절한 오류 메시지가 나타나 속도 제한을 초과합니다.

나는 곧바로 버퍼를 사용하도록 코드를 변경했습니다. 호출 전에 fs.readFileSync를 통해 버퍼를 읽습니다.

media: { 
    mimeType: 'text/plain', 
    body: buf 
} 
+0

이제 제 질문을 읽었습니다. 부분적인 대답입니다. 나는 여전히 할당량을 초과하지는 않지만 Google이 403으로 돌아 오는 이유를 분명하지 않습니다. 나는 파일을 업로드 할 때 내부 공개 된 한도에 도달 할 것으로 짐작하고있다. –

관련 문제