我创建了一个平面数据结构。当推送重复数据时,接受的模式是为了使数据保持最新。此处,组信息的数据将复制到users-groups
和groups
树中。
{
"users": ..
"users-groups": ..
"groups": ..
}
为用户创建组时,会发生两次更新:
首先:推送到/ groups / group_key
{
"name": "Test Group",
"image: "/testimage.jpg"
}
第二:推送到/ users-groups / user_uid / group_key
{
"orderNum: 0,
"info": {
"name": "Test Group",
"image: "/testimage.jpg"
}
}
应该将用户组中的这些数据保持为最新的客户端工作还是服务器应该处理这个?
组树中的数据始终是最新的,更改应向下传播给属于该组成员的所有用户。
是否有针对此问题的教程或参考资料?
注意:我正在使用这种结构,因为用户可以是多个组的成员,我认为最好不要让几个ref.once
来获取数据。 /groups/
直接。
答案 0 :(得分:2)
您可以使用多路径更新。只需观察功能参考并更新所有其他信息
db.ref("").update({
'/users/dedd': info,
'/users/cdcd': info2
})
答案 1 :(得分:0)
您不应该保存重复的数据。相反,您应该保存对组的引用。
您的数据应如下所示。
{
"users": {
"userkey1": {
"data": {
"name": "",
"firstname": ""
},
"groups": {
"groupkey1": true // true or orderNum value
}
}
},
"groups": {
"groupkey1": {
"data": {
"name": "Test Group",
"image": "/testimage.jpg",
"other": "data"
},
"users": {
"userkey1": true
}
}
}
}
您可以通过检查这些位置的值是true
来轻松检查用户是否在群组中。
users/userkey1/groups/groupkey1
或groups/groupkey1/users/userkey1
。
当您创建新群组时,只需将groups/newgroupkey
设置为groups
,即可保存在users
位置,并在newgroupkey
节点下更新true
。
所以你不要复制你的数据。
有关构建数据的更多信息,请查看以下链接。
https://firebase.google.com/docs/database/android/structure-data