我在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.
因此,这似乎是某种未公开的速率限制之类的东西。有时真的很快,有时却非常慢。
答案 0 :(得分:0)
如果适合您的情况,您是否可以将整个工作表下载为CSV文件,或将其中的3个下载为每张工作表1个。对于API而言,将数据行分别过滤到API调用结果中并序列化它们,而不是将整个工作表导出到文件中,可能要慢得多。