2017-10-11 82 views
0

我有一個程序,我必須將約500,000個文件複製到谷歌驅動器到不同的文件夾。我使用谷歌驅動器v3 nodejs api。我每秒發佈約2次上傳(每450毫秒)。過了一段時間,我從ECONNRESET或套接字掛起。谷歌驅動器Rest API - 創建文件 - 配額

當我查看console.cloud.google.com上的配額時。我遠沒有接近配額。爲什麼失敗?

對於踢,我已經嘗試谷歌文件流,它沒有問題推入我的用戶帳戶下的驅動器。它快了大約5倍。

有沒有人遇到過這個問題?

+0

是否存在http錯誤狀態?您特別在尋找304 Rate Exceeded錯誤 – pinoyyid

+0

ECONNRESET:套接字掛斷是我得到的錯誤。我熟悉超出的比率。我有兩個階段的過程;一個創建目錄,另一個創建文件。第一階段,我每秒鐘餵食大約5個目錄..我會得到遏制,我實現了指數退避..在這種情況下,它只是上述錯誤... –

+0

理解。我不知道。請注意,exp退避與實現節流的理想算法相差甚遠。對於最大吞吐量,您應該實施自適應退避。 – pinoyyid

回答

0

我認爲你的配額本身在這裏不是問題。當您在短時間內寫入太多數據時發生這種情況。嘗試減慢速度,嘗試在不同用戶帳戶之間分割請求。這應該有助於解決您正在執行的許多請求。另外,不要忘記爲4xx錯誤重試實施exponential backoff。我的兩分錢。

+0

這些文件通常大小爲2kb。大約需要一秒鐘才能完成,所以我試圖獲得更快的速度。此外,文件製作者(舊版本的谷歌驅動器)似乎要做得更快。當我把它放到谷歌驅動器文件夾中時,它比我的4天花了大約16個小時。這是我無法解釋的部分。我確實實施了指數時間關閉。但是,在某些情況下,谷歌需要幾秒鐘才能返回失敗。所以,當谷歌說不,我已經發送了10個文件(每秒3個文件)...我扼殺了10秒鐘,所以最終它變成了串行 –

0

當我打電話傳遞流時,會出現這種情況。 developers.google.com沒有警告,但在github repository處有警告。

您還可以通過將media.body指定爲可讀流來上載媒體。這可以讓你上傳非常大的文件,這些文件不能放入內存。

注意:您的可讀流可能不穩定。使用風險自負。

一旦我改變它不使用流,我開始得到適當的錯誤信息,如狀態碼403,超過了你的速率限制。

我只是改變我的代碼使用直接緩衝區。在調用之前通過fs.readFileSync讀取緩衝區。

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

現在,我讀了我的問題,我可以看到這個是部分答案。即使我沒有超過配額,我仍然不清楚爲什麼谷歌會回來403。我猜測我在上傳文件時遇到了內部未公開的限制。 –