【问题标题】:Create firestore trigger programmatically?以编程方式创建firestore触发器?
【发布时间】:2020-10-07 10:42:21
【问题描述】:

有没有办法以编程方式创建 Firestore 触发器?

我希望使用 firestore 触发器来保持复合对象在它们处于主要->次要关系中的位置一致 - 如果“主要”发生更改,则“次要”必须相应更新。

但是我不需要查看集合中的每个“主要”文档,因为只有有限数量的“主要”对象具有“次要”关系 - 我的假设是只查看特定文档而不是整个集合将提高整体性能并降低成本,因为触发器只会针对相关文档触发,因此与集合中的文档总数相比,要侦听的文档数量要少得多

虽然我可以将这些具有关系的文档放在单独的集合中并在其中添加通配符触发器,但我不想这样做,因为我想保持集合一致并减少查询/更新“我的应用程序中的主要”文档。

相反,我想知道是否有一种方法可以在创建新关系时动态地将触发器添加到特定的“主要”文档?

或者从性能/成本的角度来看,如果我添加多个单个文档稀疏触发器与为整个集合添加通配符侦听器,这真的很重要吗?

【问题讨论】:

  • 您是在谈论 Firestore 的 Cloud Functions 触发器吗?
  • @DougStevenson 是的,完全正确。但是,如果使用 Cloud Functions 触发器无法做到这一点,并且如果有其他类型的触发器可以做到这一点,我们将非常感谢您的意见。

标签: google-cloud-firestore google-cloud-functions


【解决方案1】:

在使用 Cloud Functions 触发器时,Firestore 数据库没有已知的性能下降。数据库只是在更改发生后异步发出事件。它们不会影响数据库的性能。

添加新触发器的唯一方法是完成部署过程。通常,这将在 Firebase CLI 或 gcloud 中发生。如果您不想使用其中任何一个 CLI,则必须使用 Cloud Functions REST API。这对于设置和使用来说非常重要。由您决定这是否值得。

【讨论】:

    【解决方案2】:

    根据 Doug 的回答,我最终为整个集合设置了一个通配符触发器,并在“主要”文档中添加了一个标志字段,指示是否存在要更新的关系。

    这有助于最大限度地减少触发器内的冗余工作,以节省 CPU/内存/额外请求,并仅根据标志字段执行额外的逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      相关资源
      最近更新 更多