Firebase:数据结构

时间:2016-06-05 08:50:21

标签: firebase firebase-realtime-database

此节点中的成员数何时开始影响效果?

示例节点

Groups
    id_0
      groupName: Bills Cooking
      members
        uid_0: true
        uid_1: true
        uid_2: true

我想知道成员组中的键数何时变得太多,并且开始影响性能。

每个组都包含与其关联的所有成员的引用ID,可能为0或者可能为1000或更多。

成员节点(未显示)将拥有自己的引用,指示它们属于哪些组。根据我的理解,这是在Firebase中构建数据的好方法,在这两个区域都有引用键。

如果要列出tableview中的所有组名,我将获取所有组节点以获取其名称。问题是这样做我同时获取所有成员的密钥 - 我确定它的罚款大约10个左右我只是想知道你说的重点 - 时间重构。如果每组中有100个组和1000个用户 - 您将获取大量额外数据。

我知道我可以创建另一个节点并避免此问题,但这就是Firebase建议我们构建数据的方式。详见here

由于

1 个答案:

答案 0 :(得分:3)

这是答案的关键:

  

如果要列出tableview中的所有组名

     

如果每组有100个组和1000个用户

即使每组中有多个用户,100个组也相当小。所以想一想......

用户登录并完成查询,返回他们所属的组。

假设每个用户不是每个组的成员(如果他们是,结构将是不需要的),它将返回少于100的一些组。

更重要的是,为了获得良好的用户体验,您可能不会一次显示100个组 - 这将是其中的一部分;也许15左右。

如果你担心应用程序内存空间,而不是通过.Value查询一次返回所有数据,而不是通过.ChildAdded查询,它将一次返回一个节点,获取组名并抛出其余的数据。

另一个想法是打破群组名称并根据需要在代码中查找它们。

group_names
      gid_0: Bills Cooking
      gid_1: Jay's Big Band Extravagnza
      gid_2: Kato's Karate Korner

只有100个,所以应用程序开始将它们全部加载到字典中。

然后在用户节点

users
  uid_0
    name: Jesse
    groups:
      gid_1: true
      gid_2: true

用户登录并且您知道他属于第1组和第2组,并且您已经从组词典中获得了这些名称

让groupName = groups_dict.objectForKey [“gid_2”] //加藤的空手道Korner