Cloud Firestore 中的文档计数速度有多快?

Fra*_*len 7 firebase google-cloud-firestore

去年,Firestore 引入了计数查询,它允许您检索查询/集合中的结果数量,而无需实际读取各个文档。

此计数功能的文档提到:

聚合查询依赖于您的查询已使用的现有索引配置,并根据扫描的索引条目数按比例缩放。这意味着中小型数据集的聚合会在 20-40 毫秒内执行,但延迟会随着计数的项目数量而增加。

和:

如果count()聚合无法在 60 秒内解析,则会返回错误DEADLINE_EXCEEDED

在 1 分钟超时内,Firestore 实际可以计算多少文档?

Fra*_*len 8

我在测试数据库中创建了一些包含许多文档的集合,然后对其运行 COUNT() 查询。

\n

通过 Node.js Admin SDK 生成最小文档的代码:

\n
const db = getFirestore();\nconst col = db.collection("10m");\nlet count = 0;\n\nconst writer = db.bulkWriter();\nwhile (count++ < 10_000_000) {\n  if (count % 1000 === 0) await writer.flush();\n  writer.create(col.doc(), {\n    index: count,\n    createdAt: FieldValue.serverTimestamp()\n  })\n}\nawait writer.close();\n
Run Code Online (Sandbox Code Playgroud)\n

然后我用以下方法数了数:

\n
for (const name of ["1k", "10k", "1m", "10m"]) {\n  const start = Date.now();\n  const result = await getCountFromServer(collection(db, name));\n  console.log(`Collection \'${name}\' contains ${result.data().count} docs (counting took ${Date.now()-start}ms)`);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我得到的结果是:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n
数数多发性硬化症
1,000120
10,000236
100,000401
1,000,0001,814
10,000,00016,565
\n
\n

我在限制和条件下运行了一些额外的测试,结果始终与上面计算的结果数量一致。例如,计算包含 10m 个文档的集合的 10% 大约需要 1\xc2\xbd 到 2 秒。

\n

因此,基于此,在达到 60 秒超时之前,您最多可以统计大约 40m 个文档。老实说,考虑到每计数 1,000 个文档,您需要支付 1 个文档读取费用,您可能希望在此之前就切换到存储的计数器。

\n