【问题标题】:Firebase efficient structuring of data?Firebase 高效的数据结构?
【发布时间】:2017-04-08 22:07:43
【问题描述】:

假设我有以下结构,并且我想运行查询以显示照片列表/他们的作者照片和姓名。构建和查询此内容的最佳方式是什么?

一方面,我不喜欢在每张照片下复制数据(user.name 和 user.photoUrl)。另一方面,我认为没有干净的方法可以在照片查询中包含完整用户,或者根据 id 列表获取用户列表(基本上是 IN 语句)?

users
   user1
      name: "A"
      photoUrl: "LINK"
   user2
      name: "B"
      photoUrl: "LINK"

photos
    photo1
       author: user1
       photoUrl: "Link"
       likesCount: 120

【问题讨论】:

    标签: ios firebase firebase-realtime-database


    【解决方案1】:

    NoSQL 系统中的数据重复非常普遍 - 磁盘空间很便宜。但是,如果处理不当,可能会使事情变得过于复杂并“把你逼入绝境”:更新数据集需要对数据库进行多次更新。

    解决方案的几个选项是

    1) Duplicate Data
    2) Nest queries
    3) Simplify
    

    1)重复数据:这很明显,在您的问题中提到,将用户信息添加到每张照片。不要避免这种解决方案,因为它通常是要走的路。

    2) 嵌套查询:也非常简单:将所有照片节点加载到一个数组中,然后遍历该数组并加载每个作者。这也很常见,但您必须考虑 Firebase 的异步特性,并确保在函数关闭完成之前不使用数据。

    3) 简化您的结构:从您的示例中可以看出,您有一对多的关系。

    每个作者/用户都有多张照片,所以保存很简单,把照片数据和作者一起保存。

    user_0
       name: "A"
       photos
         photo_0
          url: "asdasd"
          likes: 123
         photo_1
          url: "fghfhf"
          likes: 42
    user_1
       name: "B"
       photos
         photo_0
          url: "qqqqqq"
          likes: 12
         photo_1
          url: "wwww"
          likes: 16
    

    我很喜欢Denormalizing data - 越平坦越好。但是,这完全取决于用例,因此不是必需的,在这种情况下,根据问题中的数据,简化可能是最好的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      • 2017-01-07
      相关资源
      最近更新 更多