首页 > 解决方案 > 云任务运行时 Firestore 并发限制

问题描述

我正在尝试使用云任务每分钟执行一次云功能。只是想象一下,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 个。我能做些什么来克服这种情况?

标签: firebasegoogle-cloud-firestoregoogle-cloud-functionsgoogle-cloud-tasks

解决方案


请限制自己在以后的每个帖子中回答一个问题。

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

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

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

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


推荐阅读