Firebase高效构建数据?

时间:2017-04-07 20:28:52

标签: ios firebase firebase-realtime-database

假设我有以下结构,我想运行一个查询来显示照片列表/他们的作者照片和名称。构建和查询这个的最佳方法是什么?

一方面,我不喜欢在每张照片下复制数据(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

1 个答案:

答案 0 :(得分:0)

NoSQL系统中的数据复制非常普遍 - 磁盘空间很便宜。但是,如果操作不当,可能会使问题复杂化并“将您编入角落”:更新数据集需要对数据库进行多次更新。

解决方案的一些选项是

1) Duplicate Data
2) Nest queries
3) Simplify

1)重复数据:这是相当明显的,并在您的问题中提到,将用户信息添加到每张照片。不要避免这种解决方案,因为它往往是可行的方式。

2)Nest查询:非常简单:将所有照片节点加载到一个数组中,然后迭代数组并加载每个作者。这也很常见,但您必须考虑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 - 我越是越好越好。但是,这一切都取决于用例,因此不是必需的,在这种情况下,根据问题中的数据,简化可能是最佳解决方案。