2016-05-17 105 views
1

我创建了一个Firebase Swift应用,用户可以在其中查看由其他用户在提要中发布的消息。有些消息与某些用户有关。消息可以评论和upvoted/downvoted。Firebase可扩展性:整个数据集对多个观察者的观察

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

1)一个观察者,检查所有消息。价值和重新填充料。

2)每个用户拥有的消息的一个观察者,并删除并添加观察者作为馈送更新。

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

哪一个更好的设计?

回答

4

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

因此,例如,这里是存储帖子的帖子(消息)节点。

{ 
    "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_0" : { 
     "msg" : "some message", 
     "users_watching_this_post" 
     "uid_0": true 
     "uid_2": true 
    }, 

的post_x节点和深查询这个扩大

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