【问题标题】:Is there a way to prevent infinite updates in Firestore?有没有办法防止 Firestore 中的无限更新?
【发布时间】:2020-03-17 01:07:20
【问题描述】:

如果我在更新自身的文档上的 Firestore 云更新功能中出错,是否有某种方法可以检测并终止循环?

我担心在编写云函数时犯了一个愚蠢的错误会导致巨大的 Firestore 费用。

【问题讨论】:

  • 我很惊讶没有官方的样板可以防止这种情况发生!
  • 通常有一种方法可以检测到这一点,但这取决于您的具体代码。为了给你一些想法,今天我正在编写一个云函数,它故意触发了 2 次,但在那之后不得不停止。系统本身无法检测到这种情况,所以这取决于你的代码。如果您需要帮助确定如何正确退出代码,请发布minimal, complete/standalone code that reproduces the problem

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


【解决方案1】:

您必须在函数代码中检测这种情况。没有自动检测。具体来说,您的代码将需要能够识别触发函数的更新是函数本身先前更新的结果的情况。有时这涉及检查文档中表明它已被处理的标志,或者寻找其他方法来查看工作是否已经完成。如果是,该函数应该直接返回而无需再次更新文档。

有一个视频讨论了与实时数据库相同的问题。这是完全相同的问题,只是使用了不同的数据库。

https://www.youtube.com/watch?v=Bdm7QNwSHOg

【讨论】:

  • 好的,谢谢。似乎谷歌应该提供一些设置,在 n 次更新后停止对同一组记录的这种递归更新,这样你就不会因为没有发现错误而破产。
  • 它实际上并不是真正的“递归”,甚至不是真正的循环。这是因果关系。 Cloud Functions 被设计为无状态,这是系统可以有效扩展的唯一方式。在这种情况下,您必须提供自己的状态。如果您不同意,请随时向 Firebase 支持提出问题,但我认为不会发生任何事情(相信我,因为我曾经在 Cloud Functions 团队工作)。
  • 如果您担心计费问题,您可以随时设置计费提醒,以便在您的总支出超出预算时通知您。 cloud.google.com/billing/docs/how-to/budgets
  • 是的,我注意到了计费警报,但我想知道如果你有一个基本上是循环的更新链,你可以在短时间内产生什么样的费用。犯一个错误似乎并不难,例如,如果我有一组更新触发器,其中 B 更新 C,C 更新 D,然后几天后我编写了一个触发器,其中 D 更新 B。如果我没有直到第二天早上才查看我的电子邮件,我怎么想知道我最终会收到多大的账单? 1美元,10美元? 1000 美元?
  • 如果您对如何处理计费问题有任何疑问,请联系 Firebase 支持。 support.google.com/firebase/contact/support
猜你喜欢
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2012-02-03
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多