我发现Firebase数据库sample非常有用,但我注意到了一些令我担心的事情。
我的意思是在这个例子中,用户可以为帖子添加星标,例如"喜欢它"在脸书上。在提供的示例中,他们将星形嵌套到post中,因此我们有这样的示例对象:
"post_id" : {
"author": "username",
"body": "Some content",
"starCount": 1
"stars" : {
"user_id_who_gave_star" : "true"
}
"title": "Some title",
"uid": "author_id"
}
这种解决方案具有许多优点,例如,我们可以检查是否已经给出了明星并隐藏或更改了图标,或者我们可以通过一次交易来更改" starCount"并将下一个值添加到" stars"。
但问题是当我们有大量应用程序且1000个用户给出了明星时,所以每次下载发布数据时我们都会下载1000个userIds,这可能不是最佳解决方案。
问题
我的问题是,对于此类应用程序,最佳方法是什么,并且有人测试过Firebase在这种情况下的工作方式?
答案 0 :(得分:1)
firebaser here
在为我们的文档编写示例时,我们始终必须平衡对足够上下文的需求,保持示例足够小并遵循我们自己的最佳实践。
这确实是我们违反“不嵌套数据”的最佳做法之一的情况之一。正如您所说:这意味着用户下载帖子,获取喜欢该帖子的所有用户UID。
随着应用程序的使用扩展,这可能成为一个问题。如果您的应用就是这种情况,那么您应该将“赞成帖子的用户”建模为单独的顶级节点:
"posts": {
"post_id" : {
"author": "username",
"body": "Some content",
"starCount": 1
"title": "Some title",
"uid": "author_id"
}
},
"upvotes": {
"post_id" : {
"user_id_who_gave_star" : "true"
}
}