Firebase最好发布数据结构(未索引,数百名观察者与数千次更新)

时间:2018-07-06 02:03:56

标签: firebase data-structures google-cloud-firestore denormalization

最初,我的数据结构是这样的:

"feeds" : {
"3ASP4M5mkTPGPO1qQhfVKXsr6Qf2" : {
    "-L65VFpW2cYIMxG2e9Ll" : "true",
    "-L65VH5jkKPYAguzgqpn" : "true"
}
"posts" : {
    "-L7CpeKT2lzsPALAfNti" : {
        "Revealed" : "true",
        "datePosted" : "2018-03-10 02:56:33 +0000",
        "information" : {
            "posterID" : "BmVot3XHEpYwMNtiucWSb8XPPM42",
            "posterName" : "tester",
            "profileImage" : "nil"
        }

有一个供稿和帖子的部分。当用户登录到应用程序时,观察者将被添加到其供稿中。然后,对于提要中的每个孩子,将添加另一个观察者来观察该帖子。这样做的问题是,添加了太多的观察者,并且该应用无法正常运行,因为有时会添加数百(如果不是数千)观察者(每个帖子一个)。

Ordered Array flickering effect?

从这个问题,我意识到查询数据库的一种更有效的方法是:

posts
   post_0
     name: "Jim"
     post: "We have them just where they want us"
     watched_by:
        uid_0: true
        uid_1: true
   post_1
     name: "Spock"
     post: "Nothing unreal exists"
     watched_by:
        uid_1: true
   post_2
     name: "Bones"
     post: "I'm a doctor, not an escalator"
     watched_by
        uid_0: true

现在,我只是简单地查询watched_by包含用户ID的帖子。 Feed加载速度更快,应用程序运行速度也更快。另外,数据库要干净得多。但是,问题是,似乎无法索引帖子。即使我尝试

"posts": {
  "$postID":{
    "watchedBy": {
      ".indexOn":".value"
    }
  }
}

帖子仍未建立索引。有什么方法可以索引这些帖子或合并两个数据库结构?我当前使用的未索引结构的缺点还在于,如果用户发布的好友有100个,则有一个watchedBy节点,但这似乎比添加数百个观察者更好。

将整个帖子(而不是参考)添加到每个用户的提要中似乎不合理,因为帖子不断变化-喜欢,信息等。即使具有云功能,用户每次喜欢一个帖子,则需要更新该帖子的100个副本。并且,添加信息后,最多需要更新100份。此外,删除帖子后,所有这些副本也需要删除。

总而言之,如果无法索引watchedBy子级,那么最佳的数据结构是什么?最简单的方法是将posts部分迁移到FireStore吗?

0 个答案:

没有答案