【问题标题】: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 - 越平坦越好。但是,这完全取决于用例,因此不是必需的,在这种情况下,根据问题中的数据,简化可能是最好的解决方案。