【发布时间】:2017-10-23 18:38:36
【问题描述】:
我在 firebase 的帮助下设计了一个聊天应用程序,但我对同样的数据库设计感到震惊。我已经阅读了firebase structure data for app提供的以下链接
我目前的做法:
"messages" : {
"-Kkiyu4zSKQAzu3MxpGe": {
"recId" : 1994,
"senderId" : 9,
"senderName" : "Alex",
"text" : "Hello",
"time" : "2017-05-22T12:37:41+0530"
},
"-Kkiyw1yVTbR_wDFFiuA" : {
"recId" : 9,
"senderId" : 1994,
"senderName" : "Ted",
"text" : "Hi",
"time" : "2017-05-22T12:37:49+0530"
},
"-KkiywFENy__tCHuuuom" : {
"recId" : 1994,
"senderId" : 9,
"senderName" : "Alex",
"text" : "What's up?",
"time" : "2017-05-22T12:37:50+0530"
},
"-KkiyxDjsUIXBlM0Cn3R" : {
"recId" : 9,
"senderId" : 1994,
"senderName" : "Ted",
"text" : "All good",
"time" : "2017-05-22T12:37:54+0530"
}
同样,我有用户 JSON 结构,在该结构中,我有 3 种类型的用户,如下所示
1. Branch Manager
2. Delivery boy
3. Admin
"users" : {
"9" : {
"empId" : 9,
"isOnline" : false,
"name" : "Alex",
"userType" : "M"
},
"1994" : {
"branchId" : 9,
"empId" : 1994,
"isOnline" : false,
"name" : "Ted",
"userType" : "D"
},
"25" : {
"empId" : 25,
"isOnline" : false,
"name" : "Tim",
"userType" : "A"
}
}
和我在应用程序中的听众如下:
sendReference.observe(.childAdded, with: { (snapshot) in
if let data = snapshot.value {
let message = RCMessage(object: data)
message.Id = snapshot.key
let dbManager = RCPersistencyManager()
dbManager.add(message: message)
}
})
receiveReference.observe(.childAdded, with: { (snapshot) in
if let data = snapshot.value {
let message = RCMessage(object: data)
message.Id = snapshot.key
let dbManager = RCPersistencyManager()
dbManager.add(message: message)
dbManager.update(userwithMessage: message)
}
})
我在我的 senderId 和我的 recieverId 上添加了侦听器,我认为这是切割器,因为我将只接收由我发送或定向到我的消息。
sendReference = companyReference.child("messages").queryOrdered(byChild: "senderId").queryEqual(toValue: Int(RCDataManager.get(stringforKey: "RCUserID")!))
receiveReference = companyReference.child("messages").queryOrdered(byChild: "recId").queryEqual(toValue: Int(RCDataManager.get(stringforKey: "RCUserID")!))
但是现在更大的问题来了所有的孩子一次又一次,当孩子的数量超过 200 或者说 300 时,同步数据库需要时间,这会降低我的应用程序的性能我只想获取查询下的新消息,我知道这种设计不是很高兴得到那个真正期待好的答案。
提前致谢
【问题讨论】:
标签: ios swift firebase firebase-realtime-database chat