2017-04-07 90 views
-1

比方说,我有以下结构,我想运行一个查询来显示照片/他们的作者照片和名称列表。结构和查询的最佳方式是什么?Firebase高效构建数据?

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

回答

0

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 - 越平坦越好。然而,这一切都取决于用例,所以它不是一个要求,在这种情况下,根据问题中的数据,简化可能是最好的解决方案。