在Firebase数据库中嵌套星标

时间:2016-12-12 17:53:51

标签: android firebase firebase-realtime-database nosql

我发现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在这种情况下的工作方式?

1 个答案:

答案 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"
    }
}