我正在开发一个用户可以发布内容的项目。但是,我想知道我的firebase数据库结构是否有效。下面是我的数据库到目前为止的样子。我有帖子孩子包含用户将发布的所有帖子。并且每个用户都可以通过posts
中的uid
子项来跟踪自己的帖子。有没有更好的方法来构建我的数据?或者我很高兴去?任何意见,将不胜感激!
{
"posts" : {
"-KVRT-4z1AUoztWnF-pe" : {
"caption" : "",
"likes" : 0,
"pictureUrl" : "https://firebasestorage.googleapis.com/v0/b/cloub-4fdbd.appspot.com/o/users%2FufTgaqudXeUciW5bGgCSfoTRUw92%2F208222E1-8E20-42A0-9EEF-8AF34F523878.png?alt=media&token=9ec5301e-d913-44ee-81d0-e0ec117017de",
"timestamp" : 1477946376629,
"writer" : "ufTgaqudXeUciW5bGgCSfoTRUw92"
}
},
"users" : {
"ufTgaqudXeUciW5bGgCSfoTRUw92" : {
"email" : "Test1@gmail.com",
"posts" : {
"-KVRT-4z1AUoztWnF-pe" : {
"timestamp" : 1477946376677
}
},
"profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/cloub-4fdbd.appspot.com/o/profile_images%2F364DDC66-BDDB-41A4-969E-397A79ECEA3D.png?alt=media&token=c135d337-a139-475c-b7a4-d289555b94ca",
"username" : "Test1"
}
}
}
答案 0 :(得分:0)
使用 NoSql 数据,您需要处理以下事项: -
尝试这种结构: -
users:{
userID1: {..//Users info..
posts:{
postID1: true,
postID2: true,
postID3: true,
}
},
userID2: {..//Users info..},
userID3: {..//Users info..},
userID4: {..//Users info..},
},
posts: {
userID1 :{
postID1: {..//POST CONTENT },
postID2: {..//POST CONTENT },
postID3: {..//POST CONTENT },
}
}
答案 1 :(得分:0)
保持数据平坦浅浅。将数据存储在树中的其他位置,而不是将数据分支嵌套在简单相关的节点下,如果这有助于保持树浅,则复制数据。
目标是快速请求只返回您需要的数据。考虑每次树更改并且客户端侦听器触发节点并且其所有子节点都传递给客户端。跨树复制数据有助于以最少的数据快速请求。
这种扁平化数据的过程称为“非规范化”,Firebase文档的这一部分可以很好地提供指导:
https://firebase.google.com/docs/database/android/structure-data
在上面的示例中,我看到嵌套在“users”下的帖子元数据,这是一个增长的嵌套列表。每当“用户”下的某些内容发生变化时,监听器将触发更新客户端,并且所有这些数据都将在每个响应中传输。您可以考虑根据作者的uuid从“posts”节点获取帖子数据。