Node.js 在计划云功能中删除大量文档的最佳方法
我在一个用例中工作,在这个用例中,每5分钟执行一次计划的云功能。此函数在2GB内存和256秒超时的情况下运行,将查询集合,尝试搜索过期文档 由于成功删除文档至关重要,我担心大量文档会出现错误。。。我已经读到,批量删除在大多数情况下是解决此问题的关键,但是,如果其中一个删除失败,大量删除将被忽略 目前,我正在这样做:Node.js 在计划云功能中删除大量文档的最佳方法,node.js,google-cloud-firestore,google-cloud-functions,Node.js,Google Cloud Firestore,Google Cloud Functions,我在一个用例中工作,在这个用例中,每5分钟执行一次计划的云功能。此函数在2GB内存和256秒超时的情况下运行,将查询集合,尝试搜索过期文档 由于成功删除文档至关重要,我担心大量文档会出现错误。。。我已经读到,批量删除在大多数情况下是解决此问题的关键,但是,如果其中一个删除失败,大量删除将被忽略 目前,我正在这样做: await allSettled( querySnapshot.docs.map((doc) => { ... // Create
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);
};
如您所见,我不是批量删除“常规”文档,而是映射文档列表,对于每个文档,在独立的批量操作中,我删除它并减少一个计数器
建议使用哪种方法从集合中删除大量文档(以避免内存不足错误等)?您认为可以在第一个云函数(在scheduler上每N分钟运行一次)中获取要删除的文档列表,然后将该列表划分为M个不重叠的块,并推送M条消息吗(每条消息的一个“区块”)插入到某个PubSub主题中。在主题的另一侧,有另一个由PubSub消息触发的云函数(最大实例数很大)。该云函数可以通过查看传入文档列表(类似于您提供的代码)来完成删除操作.在这种情况下,这些删除可能或多或少并行进行 如果某个内容没有被删除,那么它将被下一个计划的“作业”拾取
您认为它在您的上下文中有用吗?您认为可以在第一个云函数中获取要删除的文档列表(在scheduler上每N分钟运行一次),然后将该列表划分为M个不重叠的区块,并推送M条消息(每条消息一个“区块”)进入某个PubSub主题。在主题的另一侧,有另一个由PubSub消息触发的云函数(最大实例数较大)。该云函数可以通过查看传入文档列表(类似于您提供的代码)来执行删除操作.在这种情况下,这些删除可能或多或少并行进行 如果某个内容没有被删除,那么它将被下一个计划的“作业”拾取 你认为它在你的环境中有用吗