【问题标题】:How fast is counting documents in Cloud Firestore?Cloud Firestore 中的文档计数速度有多快?
【发布时间】:2023-02-02 07:06:23
【问题描述】:

去年 Firestore 推出了count queries,它允许您检索查询/集合中的结果数量,而无需实际阅读各个文档。

这个count feature 的文档提到:

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

和:

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

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

【问题讨论】:

    标签: google-cloud-firestore


    【解决方案1】:

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

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

    const db = getFirestore();
    const col = db.collection("10m");
    let count = 0;
    
    const writer = db.bulkWriter();
    while (count++ < 10_000_000) {
      if (count % 1000 === 0) await writer.flush();
      writer.create(col.doc(), {
        index: count,
        createdAt: FieldValue.serverTimestamp()
      })
    }
    await writer.close();
    

    然后我用:

    for (const colName of ["1k", "10k", "1m", "10m"]) {
      const start = Date.now();
      const result = await getCountFromServer(query(collection(db, colName), limit(7_500_000)));
      console.log(`Collection '${colName}' contains ${result.data().count} docs (counting took ${Date.now()-start}ms)`);
    }
    

    我得到的结果是:

    count ms
    1,000 120
    10,000 236
    100,000 401
    1,000,000 1,814
    10,000,000 16,565

    我运行了一些带有限制和条件的额外测试,结果始终与上面计算的结果数一致。因此,例如,计算 1000 万文档的集合的 10% 大约需要 1.5 到 2 秒。

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

    【讨论】:

      猜你喜欢
      • 2018-04-22
      • 2019-09-03
      • 1970-01-01
      • 2023-03-30
      • 2018-11-18
      • 2020-03-19
      • 2020-07-02
      • 1970-01-01
      • 2021-04-24
      相关资源
      最近更新 更多