我正在创建一个Firebase Swift应用,用户可以在该应用中查看其他用户在Feed中发布的消息。某些消息与某些用户相关。消息可以评论和上调/下调。
哪种设计更具可扩展性:
1)一位观察员检查所有消息' .Value并重新填充饲料。
2)用户拥有的每条消息的一个观察者,并删除并添加观察者作为提要更新。
1)听起来不太可扩展,但我担心2)有很多观察者和添加和删除观察者的延迟。
哪个是更好的设计?
答案 0 :(得分: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"
}
}
}
以下是观察包含对uid_2
的引用的帖子的代码 let postsRef = myRootRef.childByAppendingPath("posts")
postsRef.queryOrderedByChild("user").queryEqualToValue("uid_2")
.observeEventType(.ChildAdded, withBlock: { snapshot in
print(snapshot)
})
运行此代码后,发布在posts节点中且具有user = 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)
})