谷歌驱动器Rest API - 创建文件 - 配额

问题描述:

我有一个程序,我必须将约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

我认为你的配额本身在这里不是问题。当您在短时间内写入太多数据时发生这种情况。尝试减慢速度,尝试在不同用户帐户之间分割请求。这应该有助于解决您正在执行的许多请求。另外,不要忘记为4xx错误重试实施exponential backoff。我的两分钱。

+0

这些文件通常大小为2kb。大约需要一秒钟才能完成,所以我试图获得更快的速度。此外,文件制作者(旧版本的谷歌驱动器)似乎要做得更快。当我把它放到谷歌驱动器文件夹中时,它比我的4天花了大约16个小时。这是我无法解释的部分。我确实实施了指数时间关闭。但是,在某些情况下,谷歌需要几秒钟才能返回失败。所以,当谷歌说不,我已经发送了10个文件(每秒3个文件)...我扼杀了10秒钟,所以最终它变成了串行 –

当我打电话传递流时,会出现这种情况。 developers.google.com没有警告,但在github repository处有警告。

您还可以通过将media.body指定为可读流来上载媒体。这可以让你上传非常大的文件,这些文件不能放入内存。

注意:您的可读流可能不稳定。使用风险自负。

一旦我改变它不使用流,我开始得到适当的错误信息,如状态码403,超过了你的速率限制。

我只是改变我的代码使用直接缓冲区。在调用之前通过fs.readFileSync读取缓冲区。

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

现在,我读了我的问题,我可以看到这个是部分答案。即使我没有超过配额,我仍然不清楚为什么谷歌会回来403。我猜测我在上传文件时遇到了内部未公开的限制。 –