跨多个节点的 Firebase 数据一致性



根据Firebase文档,数据被扁平化,索引用于链接树中的不同节点:

users
  $userId
    widgets
      $widgetId
widgets
  $widgetId

在上面的示例中,如果用户创建了一个小部件,则该widgetid小部件也存储在用户节点下。

我的问题是是否有办法保证操作的一致性,考虑到现在需要不止一次写入。

假设第一个操作是:

var newKey = fb.child('widgets').push({ name: 'widge' }).key();

然后我可以把它写到:

fb.child('users').child(auth.id).child('widgets').child(newKey).set(true);

但是,如果两次写入之间存在故障或其他问题怎么办?或者,如果我有多个位置需要存储该密钥,并且这些写入之间发生故障?

目前有没有办法在火力基地中处理这个问题?

如果没有,将来是否有计划支持这一点?

如果是这样,有人能提供一个具体的例子来说明如何做到这一点吗?

请注意,这现在是核心 Firebase API 的一部分。有关详细信息,请参阅此博客文章。

var mergedUpdate = {};
mergedUpdate[ 'users/' + userId + '/widgets/' + widgetId ] = true;
mergedUpdate[ 'widgets/' + widgetId ] = widgetData;
var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/");
ref.update(mergedUpdate);

查看事务操作,并利用 onComplete 回调进行第二次写入。 您可以链接交易记录。
Firebase 网站上提供的示例用于安全地增加计数器。

我为另一个问题提供了一个示例代码,可能对您有所帮助。 如何使用 Firebase 存储聊天的用户和群组

最新更新