Node.js 在计划云功能中删除大量文档的最佳方法

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

我在一个用例中工作,在这个用例中,每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);
};
如您所见,我不是批量删除“常规”文档,而是映射文档列表,对于每个文档,在独立的批量操作中,我删除它并减少一个计数器


建议使用哪种方法从集合中删除大量文档(以避免内存不足错误等)?

您认为可以在第一个云函数(在scheduler上每N分钟运行一次)中获取要删除的文档列表,然后将该列表划分为M个不重叠的块,并推送M条消息吗(每条消息的一个“区块”)插入到某个PubSub主题中。在主题的另一侧,有另一个由PubSub消息触发的云函数(最大实例数很大)。该云函数可以通过查看传入文档列表(类似于您提供的代码)来完成删除操作.在这种情况下,这些删除可能或多或少并行进行

如果某个内容没有被删除,那么它将被下一个计划的“作业”拾取


您认为它在您的上下文中有用吗?

您认为可以在第一个云函数中获取要删除的文档列表(在scheduler上每N分钟运行一次),然后将该列表划分为M个不重叠的区块,并推送M条消息(每条消息一个“区块”)进入某个PubSub主题。在主题的另一侧,有另一个由PubSub消息触发的云函数(最大实例数较大)。该云函数可以通过查看传入文档列表(类似于您提供的代码)来执行删除操作.在这种情况下,这些删除可能或多或少并行进行

如果某个内容没有被删除,那么它将被下一个计划的“作业”拾取

你认为它在你的环境中有用吗