如何使用Firebase

时间:2015-04-25 15:47:48

标签: firebase

我想使用Firebase进行聊天。我需要为每个用户显示他们所属的组列表以及每个组的所有成员。

由于Firebase的设计方式,并且为了获得可接受的性能,我认为列出包含成员列表的所有组,并为每个用户创建一个包含所有组的条目。< / p>

我的第一个问题是,这是正确的方法吗?

如果是这样,我的第二个问题是如何以原子方式添加(或删除)用户,即确保将用户添加到组中并将组添加到用户中或根本不添加(即从未存储在仅限1个位置并使DB不一致)?

1 个答案:

答案 0 :(得分:2)

您提出的数据模型与firebase的建议一致。 best way to structure data in firebase

中概述了更详细的说明
users/userid/groups
groups/groupid/users

Firebase为原子操作提供.transaction。您可以链接多个事务以确保数据一致性。您也可以使用onComplete回调函数。有关详细说明,请参阅firebase transaction。我使用相同的方法来保持仪表板显示的最新消息计数。

嵌套事务的示例代码:

ref.child('users').child(userid).child(groupid).transaction(function (currentData) {
  if (currentData === null) {
    return groupid;
  } else {
    console.log('groupid already exists.');
    return; // Abort the transaction.
  }
  }, function (error, committed, snapshot) {
    if (committed) {
      console.log('start a new transaction');
      ref.child('groups').child(groupid).child(userid).tranaction(function (currentData) {
        if (currentData === null) {
            return userid;
        } else {
            console.log('Userid already exists.');
            //add code here to roll back the groupid added to users
            return; // Abort the transaction.
        }
      }, function (error, committed, snapshot) {
         if (error) {
             //rollback the groupid that was added to users in previous transaction
         }
      })
  }
});