如何使用 Firebase 存储聊天的用户和群组



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

由于Firebase的设计方式,并且为了获得可接受的性能,我认为列出包含成员列表的所有组,并且对于每个用户,也列出他们所属的所有组的条目。

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

如果是这样,我的第二个问题是我如何原子地添加(或删除)用户,即确保用户都添加到组中,并且组都添加到用户中或根本不添加(即永远不会存储在 1 个位置并使数据库不一致)?

您提出的数据模型与针对 Firebase 的建议一致。以最佳方式概述了在 Firebase 中构建数据的更详细的说明

users/userid/groups
groups/groupid/users

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

嵌套事务的示例代码:

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
         }
      })
  }
});

最新更新