NodeJS 删除集合中的Firestore文档时,建议的批处理大小是多少?

nlejzf6q  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(104)

所以我想用adminSDK删除一个集合中的所有文档,下面的代码取自这里的官方文档

async function deleteCollection(db, collectionPath, batchSize) {
  const collectionRef = db.collection(collectionPath);
  const query = collectionRef.orderBy('__name__').limit(batchSize);

  return new Promise((resolve, reject) => {
    deleteQueryBatch(db, query, resolve).catch(reject);
  });
}

async function deleteQueryBatch(db, query, resolve) {
  const snapshot = await query.get();

  const batchSize = snapshot.size;
  if (batchSize === 0) {
    // When there are no documents left, we are done
    resolve();
    return;
  }

  // Delete documents in a batch
  const batch = db.batch();
  snapshot.docs.forEach((doc) => {
    batch.delete(doc.ref);
  });
  await batch.commit();

  // Recurse on the next process tick, to avoid
  // exploding the stack.
  process.nextTick(() => {
    deleteQueryBatch(db, query, resolve);
  });
}

如您所见,我需要提供一个batchSize,它是一个数字,那么我应该提供多大的大小呢?例如,我在一个集合中有100.000个文档。
因为从文档来看,Firestore也有一个限制
每个数据库每秒的最大写入次数:10,000(每秒最多10 MiB)
那么如何确定批量大小呢?

vlju58qv

vlju58qv1#

batchSize变量用于通过limit()方法定义Query。这个Query被传递给deleteQueryBatch()方法,在该方法中执行该Query,并且根据查询结果,使用一些删除操作填充批处理写入。
由于批处理写入最多可包含500个操作,因此您可以分配给batchSize为500。
PS:我知道我没有完全回答你的问题,这更多的是关于推荐批量大小的问题,但是,由于500是批量大小的记录限制,你应该不会遇到这个限制的任何问题,除非你删除了按字典顺序关闭的文档,如文档中所述。

相关问题