【发布时间】:2021-02-10 18:18:11
【问题描述】:
我正在处理一个每 5 分钟执行计划的云功能的用例。此函数使用 2GB 内存和 256 秒超时运行,将查询集合,尝试搜索过期文档。
由于删除文档的成功至关重要,我担心大量文档可能会出现错误...我看过批量删除在大多数情况下是解决这个问题的关键,但是,如果其中一个删除失败,则会忽略大量删除。
目前,我正在这样做:
await allSettled(
querySnapshot.docs.map((doc) => {
...
// Create a batched write
const batch = firestore.batch();
// Delete the doc
batch.delete(doc.ref);
// Decrease doc owner counter
batch.set(
...
);
return batch.commit();
})
.then(() => { ... })
.catch(() => { ... });
............................
exports.allSettled = function (promises) {
let wrappedPromises = promises.map((p) =>
Promise.resolve(p).then(
(val) => ({ status: "fulfilled", value: val }),
(err) => ({ status: "rejected", reason: err })
)
);
return Promise.all(wrappedPromises);
};
如您所见,我不是批量删除“常规”文档,而是映射文档列表,并且对于每个文档,在独立的批量操作中,我将其删除并减少一个计数器。
推荐使用哪种方法从集合中删除大量文档(以避免内存不足错误等)?
【问题讨论】:
标签: node.js google-cloud-firestore google-cloud-functions