Firebase可扩展性:整个数据集与多个观察者的观察者

leo*_*loo 1 ios firebase swift

我正在创建一个Firebase Swift应用,用户可以在其中查看Feed中其他用户发布的消息.某些消息与某些用户相关.可以对消息进行评论和上调/下调.

这是一个更具可扩展性的设计:

1)一个观察者检查所有消息'.Value并重新填充饲料.

2)用户拥有的每条消息的一个观察者,并删除并添加观察者作为提要更新.

1)听起来不太可扩展,但我担心2)有很多观察者和添加和删除观察者的延迟.

哪个更好的设计?

Jay*_*Jay 5

我建议采用一种超级简单的方法.将观察者添加到包含相关用户的消息中

例如,这里是一个存储帖子的帖子(消息)节点.

{
  "posts" : {
    "post_0" : {
      "msg" : "some message",
      "user" : "uid_0"
    },
    "post_1" : {
      "msg" : "another message",
      "user" : "uid_1"
    },
    "post_2" : {
      "msg" : "yippee message",
      "user" : "uid_2"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

以下是观察包含对uid_2的引用的任何帖子的代码

    let postsRef = myRootRef.childByAppendingPath("posts")
        postsRef.queryOrderedByChild("user").queryEqualToValue("uid_2")
           .observeEventType(.ChildAdded, withBlock: { snapshot in

        print(snapshot)

    })
Run Code Online (Sandbox Code Playgroud)

运行此代码后,发布在posts节点中的具有user = uid_2的任何帖子都将通知该用户.

您可以通过为多个用户更改post_x节点来扩展此功能

  "post_0" : {
      "msg" : "some message",
      "users_watching_this_post"
         "uid_0": true
         "uid_2": true
    },
Run Code Online (Sandbox Code Playgroud)

和深层次的查询

postsRef.queryOrderedByChild("users_watching_this_post/uid_2").queryEqualToValue(true)
        .observeEventType(.ChildAdded, withBlock: { snapshot in
    print(snapshot)
})
Run Code Online (Sandbox Code Playgroud)