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

Posted

技术标签:

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

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

哪种设计更具可扩展性:

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

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

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

哪个设计更好?

【问题讨论】:

【参考方案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)
)

【讨论】:

以上是关于Firebase 可扩展性:整个数据集上的观察者与多个观察者的主要内容,如果未能解决你的问题,请参考以下文章

消除视觉Transformer与卷积神经网络在小数据集上的差距

大数据集上的扁平化+分区与嵌套记录

消除视觉Transformer与卷积神经网络在小数据集上的差距

C# LINQ 与两个不同数据集上的条件 where 子句连接

Firebase 删除的数据仍然存在

具有实时 Firebase 商店的应用程序中的 Android Studio 错误