【问题标题】:Firebase: Data StructureFirebase:数据结构
【发布时间】:2016-06-05 08:50:21
【问题描述】:

该节点内的成员数量何时开始影响性能?

示例节点

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

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

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

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

如果想在表格视图中列出所有组名,我会获取所有组节点以获取它们的名称。问题是这样做的,所以我同时获取所有成员密钥 - 我确定 10 个左右都可以,我只是想知道你说的重点是什么 - 是时候重构了。如果每个组中有 100 个组和 1000 个用户 - 您将获取大量额外数据。

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

谢谢

【问题讨论】:

    标签: firebase firebase-realtime-database


    【解决方案1】:

    这是答案的关键:

    如果想在一个表格视图中列出所有组名

    如果有 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 组,并且您已经从组字典中获得了这些名称

    let groupName = groups_dict.objectForKey["gid_2"] //加藤空手道角

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      相关资源
      最近更新 更多