【问题标题】:Firebase scalability: Observer on whole data set vs multiple observersFirebase 可扩展性:整个数据集上的观察者与多个观察者
【发布时间】:2016-05-17 07:03:55
【问题描述】:

我正在创建一个 Firebase Swift 应用,用户可以在其中查看其他用户在供稿中发布的消息。某些消息与某些用户相关。可以对消息进行评论和赞成/反对。

哪种设计更具可扩展性:

1) 一位观察者检查所有消息的 .Value 并重新填充提要。

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

1) 听起来可扩展性较差,但我担心 2) 有很多观察者以及添加和删除观察者背后的延迟。

哪个设计更好?

【问题讨论】:

    标签: ios swift firebase


    【解决方案1】:

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

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

    {
      "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"
        }
      }
    }
    

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

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

    运行此代码后,发布在帖子节点中且用户 = uid_2 的任何帖子都会通知该用户。

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

      "post_0" : {
          "msg" : "some message",
          "users_watching_this_post"
             "uid_0": true
             "uid_2": true
        },
    

    以及深度查询

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

    【讨论】:

      猜你喜欢
      • 2021-04-13
      • 2017-03-03
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      相关资源
      最近更新 更多