我有两个云功能,第一个云功能由pubsub消息触发,第二个云功能由HTTP触发,后者将条目插入数据存储区。每隔一分钟运行一次的cron会将一条消息发布到pubsub队列,该消息将调用第一个云函数。第一个云功能的主要目的是从数据存储中获取所有条目并进行处理。问题是,读取操作要从数据存储区获取条目,因此运行查询所需的时间太长(获取约20k条目)。有时似乎云功能已在两者之间中止。
由于每秒对数据存储区的读/写限制,我正在使用分片,但即使那样,它仍然要花很多时间才能从数据存储区返回值。
这是与读取查询有关的方法-
async function fetchEntry(entityName, pageCursor) {
let query = datastore.createQuery([entityName]).limit(2000);
if (pageCursor) {
query = query.start(pageCursor);
}
//console.log("Result jsonStr - " + JSON.stringify(results));
const results = await datastore.runQuery(query);
const entries = results[0];
const info = results[1];
if (info.moreResults !== Datastore.NO_MORE_RESULTS) {
//console.log(`item in batch ${entityName} - ${entries.length}`);
// If there are more results to retrieve, the end cursor is
// automatically set on `info`. To get this value directly, access
// the `endCursor` property.
const results = await fetchEntry(hostName, entityName, info.endCursor);
// Concatenate entities
results[0] = entries.concat(results[0]);
console.log(`${entityName} BATCH READ ${results[0].length}`);
return results;
}
console.log(`${entityName} BATCH READ F - ${entries.length}`);
return [entries, info];
}
我阅读了不同的博客,并尝试了不同的方法来克服相同的问题,这是我的观察-