Firebase错误:TOO_MANY_TRIGGERS

Mak*_*nko 12 firebase firebase-realtime-database google-cloud-functions

在我们的Firebase应用程序中,有一个包含实时数据库中的大量项目的列表.单个项目的每个创建,更新和删除操作都由具有onWrite触发器的Firebase云功能处理(在最简单的情况下,此功能只计算项目).但有时需要对物品进行批量操作而无需单独处理.假设我们希望在单个事务中删除所有项目并重置计数器.

早些时候它工作得很好.由于单次写入(https://firebase.google.com/docs/database/usage/limits)触发的云功能数量限制为1000 ,因此根本没有触发任何功能,这是期望的结果.

现在,如果不对应用程序代码进行任何更改,我们就会出错

错误:TOO_MANY_TRIGGERS:此请求会导致触发太多功能.

客户端应用程序,Admin API中甚至在使用Web界面导入json时出现相同的错误.只有适用于我们的选项是批量处理项目.但它不是事务性的,需要花费几十分钟而不是像以前那样毫秒.

我们有什么选择可以绕过这个错误?最佳地,这将是在超过限制的情况下跳过功能触发的一些切换.

Dou*_*son 6

目前无法阻止触发器在特殊情况下运行.解决此问题的唯一方法是取消部署所有触发器,执行更新,然后再次部署所有触发器.

我建议您为此提交功能请求.

  • @DougStevenson 为什么删除子节点超过 1000 个的单个节点会被视为多个触发器?我们只删除一个节点,这不应该只是一个触发器吗? (2认同)

Rya*_*yan 6

对于 2018 年后阅读此问题的任何人,现在可以选择禁用对触发限制的严格执行。

默认情况下,对触发事件的写操作启用严格验证。任何触发超过 1000 个云函数或大小超过 1 MB 的单个事件的写入操作都将失败并返回一个错误报告已达到的限制。这可能意味着,如果预验证失败,则某些 Cloud Functions 函数根本不会被触发。

如果您正在执行较大的写入操作(例如,删除整个数据库),您可能需要禁用此验证,因为错误本身可能会阻止操作。

要关闭strictTriggerValidation,请按照下列步骤操作:

有关文档,请参见此处:https : //firebase.google.com/docs/database/usage/limits

  • 这非常有用,谢谢。应设置为正确答案。 (2认同)