Firebase中的此类查询可以获得什么样的性能?

时间:2016-09-23 01:32:14

标签: firebase firebase-realtime-database

我想知道我将解释的这个策略是否会被建议在Firebase中使用。

我将首先解释我的目标是什么,因为我确信其他人已经解决了同样的问题,也许你们中的一些人可以告诉我它通常是如何完成的。

目标是在朋友共同的时候通知应用程序的所有用户" George" (基于他们的联系人)现在也是该应用程序的新用户。

所以,我的想法是:

1-使用此结构构建集合:

{
  "contacts": 
    {
      "user1":
      {
        {"user239":true}
        ,
        {"user23":false}
        ,
        {"user732":true}
      }
      ,
      {
       "user2" :
       {
        {"user23":false}
        ,
        {"user96":false}
        ,
        {"user88":true}
      }
    }
  }
}

为每位用户保存联系人列表。

然后新用户将查询这样的联系人列表:

fbRef.child('contacts').orderByChild('user23').equalTo(false).once('value', showResults, console.error);

然后,用户会将结果保存在地图中,将值更改为true,然后使用该地图更改为updateChildren()

现在,如果我们想象我们希望有数十万甚至数百万用户使用该应用程序,这是否合理?

当我们有5M用户并且有几个用户加入时会有多贵?

是否有一个已知的"最佳策略"对于这种情况?

由于

1 个答案:

答案 0 :(得分:0)

Firebase中的实时功能不仅适用于大型数据集,而且适用于大型数据集。实时记录流的事实是完美的。

与任何大型数据应用一样,性能仅与您的实施一样好。所以这里有一些要记住大数据集的问题。

所以你可以做的是拒绝数据。

**/users/uid
/users/uid/profile
/users/uid/chat_messages
/users/uid/groups
/users/uid/audit_record**


**/user_profiles/uid
/user_chat_messages/uid
/user_groups/uid
/user_audit_records/uid**

第二种方法适用于迭代大数据集,第一种方法清晰可见。

避免在大型数据集上调用value。请child_used拨打电话 这有助于对上述数据进行非规范化。

请记住,firebase可以处理大量数据,但这取决于您遵循的方法。

例如:如果我们想要存储' last_logins'对于任何用户,我们可以直接将其存储在特定的对象实例下。当我们想要访问' last_logins'时,它将提供方便的访问权限。对于特定用户。

维持多对多关系

我们已经看到,我们无法在组中嵌套用户,因为它不会代表多对多的关系并且会留下冗余数据。我们可以在特定的组下创建一个组索引,其中只包含用户所属组的键。这将使我们能够轻松获取用户所属的组列表。

存储一对多关系或静态列表

以下是一些必须用于firebase设计的最佳实践的链接。

Performance

Indexing