相当于MySQL交易的firebase数据库

时间:2018-06-20 15:49:09

标签: firebase firebase-realtime-database

我正在寻找一种东西,我可以在一个对象上执行多个firebase.database.References的多个更新(在执行提交之前),然后在最后提交该对象,如果不成功,则不对任何对象进行任何更改我的Firebase References

这存在吗?我认为firebase.database.Transaction会很相似,因为它是一个原子更新,并且确实包含一个回调,该回调表明是否已提交,但我相信update函数仅适用于单个对象,并且函数似乎没有返回transactionId或我可以传递给其他firebase.database.Transactions的东西。

更新 此交易的更新似乎返回了一个交易,该交易可能有助于其链接:https://firebase.google.com/docs/reference/js/firebase.firestore.Transaction

但这与其他交易不同:

1 个答案:

答案 0 :(得分:1)

Firebase数据库事务根据该位置的当前值执行更新。它们显然无法在多个位置工作,因为这会限制其可伸缩性。有时,开发人员通过在其JSON树(位置的第一个公共点)上执行更高的事务来解决此问题。我不建议这样做,因为那样会进一步限制可伸缩性。

通过一个API调用有效更新多个位置的唯一方法是进行多个位置更新。但是,这没有内置的当前值读数。

因此,如果要基于当前位置更新多个位置,则必须在应用程序代码中执行读取操作,将其转换为多位置更新,然后使用安全规则来确保所有这些位置更新遵循您的应用程序规则。这是一种非常重要的方法,因此我几乎看不到它是在实践中完成的。例如,请参见我的答案:Is the way the Firebase database quickstart handles counts secure?