Firestore 并发限制,同时云任务 运行

Firestore concurrent limitation while cloud task running

我正在尝试使用云任务每分钟执行一个云函数。想象一下,Firestore 中有一个包含 200 万份文档的集合。所以我打算每分钟都读一遍这个合集。

Document 1-->
     PerformAt: 3rd of September 2021 at 09:00AM
     Status: Scheduled

Document 2-->
    PerformAt: 3rd of September 2021 at 01:00PM
    Status: Scheduled

Document 3-->
    PerformAt: 2nd of September 2021 at 03:00PM
    Status: Done

云函数--->

const query = db.collection('tasks').where('PerformAt', '<=', now).where('Status', '==', 'scheduled');

在这种情况下,它将读取 200 万个状态计划的文档。 我的问题是,

  1. 如果我每分钟都运行这样做,它会影响我的应用程序的性能吗?

  2. 每个数据库只允许 100 万并发用户,因此该云功能会被视为 200 万并发用户还是仅一个用户?

  3. 阅读大约200万份文档需要多少时间?

  4. 此外,我现在需要在 PerformAt <= 时将状态更改为完成。在这种情况下,Firebase 只允许每个数据库写入 10,000 个。我可以做些什么来克服这种情况?

以后每个 post 请限制自己只回答一个问题。

  1. 是的,您 运行 的任何代码都会影响应用的性能。但如果不知道您的代码究竟做了什么,就不可能说出它是如何受到影响的。

  2. Cloud Functions 的每个实例仅计为一个连接。

  3. 查询的性能取决于查询返回的文档数量(及其大小),而不取决于查询中的文档数量collection。所以如果每分钟只有几个任务满足.where('PerformAt', '<=', now).where('Status', '==', 'scheduled')条件,那么只有那些文档被读取。

  4. 10,000 次写入的限制是每秒。你不太可能会碰到这个,但如果你碰到了,就没有办法绕过它(这是限制的本质)。