【问题标题】:Implications of nested transactions in Firebase?Firebase 中嵌套事务的含义?
【发布时间】:2013-04-14 01:40:11
【问题描述】:

我正在运行一个事务来更新需要存储在两个键中的项目。为此,我设置了一个嵌套事务,如下所示,它似乎按预期运行:

firebaseOOO.child('relationships/main').child(accountID).child(friendAccountID).transaction(function(data) {
    data.prop = 'newval';
    firebaseOOO.child('relationships/main').child(friendAccountID).child(accountID).transaction(function(data) {
        return r;
    });
    return r;
});

这是否有任何陷阱或可能的意外影响?我最担心在负载下陷入某种事务循环,每个事务都会取消另一个事务,迫使它们都重新启动,或类似的情况。

有没有更好的方法来做到这一点?

我正在使用 NodeJS 客户端。

【问题讨论】:

标签: node.js firebase


【解决方案1】:

您可能不想在第一个回调中启动另一个事务。无法保证您的第一个事务的函数将运行多少次,尤其是当您尝试更新的位置存在大量争用时。

我相信您在另一个问题中遇到的更好的解决方案是在检查第一个事务是否已提交之后,从完成回调开始第二个事务。

【讨论】:

  • 不错的解决方案,但这会使数据库处于不一致的状态。如果有人在第一个事务结束但第二个事务尚未完成时正在读取数据怎么办......是否有任何解决方案将事务添加到 updateChild 函数的原子函数。
猜你喜欢
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 2016-09-09
  • 2014-12-12
  • 2016-09-10
  • 2016-03-01
相关资源
最近更新 更多