Google Sheets API极度延迟

时间:2019-08-25 15:57:00

标签: google-sheets-api

我在google.apps.sheets.v4.SpreadsheetsService.GetValues函数上的平均等待时间超过40秒。我正在读取具有250,000个单元格(14列x 18,000行)的单张数据。我很好地处于速率限制之下,很少能在100秒内完成一次通话,每天只能完成200次以上。

以CSV格式下载时,文件大小约为3MB(压缩后为440KB)。

现在,我了解读取3MB数据可能不是即时的,但是40 s比我预期的慢了几个数量级。特别是考虑到以CSV格式进行简单的手动下载需要大约1s的时间。

我做错什么了吗?是否可以通过API更快地获取数据?

我正在使用的代码示例

  async function load(id, range) {
    await sheetsApi.spreadsheets.values.get({
      spreadsheetId: id,
      range,
      valueRenderOption: 'UNFORMATTED_VALUE',
    })
  }

  await Promise.all([
    load(id1, 'Big'), // big 250k cells sheet
    load(id1, 'Small'), // small 1000 cells sheet
    load(id2, 'Big'), // another big 250k cells sheet
  ])

进一步分析时,我看到以下数据:

[0] Loading id2:Big took 1644ms.    // Notice how this big sheet loaded really fast.
[0] Loading id1:Small took 26345ms. // Notice that this small sheet took 26 seconds.
[0] Loading id1:Big took 27274ms.
[0] Loading id1:Small took 859ms.
[0] Loading id2:Big took 1493ms.
[0] Loading id1:Big took 1610ms.
[0] Loading id1:Small took 865ms.
[0] Loading id2:Big took 1689ms.
[0] Loading id1:Big took 1835ms.

因此,这似乎是某种未公开的速率限制之类的东西。有时真的很快,有时却非常慢。

1 个答案:

答案 0 :(得分:0)

如果适合您的情况,您是否可以将整个工作表下载为CSV文件,或将其中的3个下载为每张工作表1个。对于API而言,将数据行分别过滤到API调用结果中并序列化它们,而不是将整个工作表导出到文件中,可能要慢得多。