【问题标题】:Best way to structure my firebase database构建我的 Firebase 数据库的最佳方法
【发布时间】:2017-03-14 01:35:34
【问题描述】:

我正在开发一个用户可以发布内容的项目。但是,我想知道我的 firebase 数据库结构是否有效。下面是我的数据库到目前为止的样子。我有帖子子包含用户将发布的所有帖子。并且每个用户都可以通过在uid 中拥有posts 孩子来跟踪他们自己的帖子。有没有更好的方法来构建我的数据?还是我可以走了?任何意见,将不胜感激!

{
 "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"
      }
   }
}

【问题讨论】:

  • 没有单一的最佳方式来构建您的数据。这完全取决于您希望如何在应用程序中使用这些数据。我推荐在NoSQL data modeling阅读这篇文章。

标签: swift firebase firebase-realtime-database


【解决方案1】:

使用 NoSql 数据,您需要处理几件事情:-

  • 避免将数据嵌套得太深
  • 尽可能扁平化你的数据结构
  • 首选字典
  • 安全规则 [Firebase]

试试这个结构:-

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 },
   }

  }

【讨论】:

    【解决方案2】:

    保持数据平淡无奇。将数据存储在树的其他位置,而不是将数据分支嵌套在简单相关的节点下,如果这有助于保持树的浅层,则复制数据。

    目标是让快速请求只返回您需要的数据。考虑到每次树发生变化并且客户端侦听器触发节点时,它的所有子节点都会与客户端通信。跨树复制数据有助于以最少的数据快速请求。

    这种扁平化数据的过程称为“非规范化”,Firebase 文档的这一部分很好地提供了指导:

    https://firebase.google.com/docs/database/android/structure-data

    在上面的示例中,我看到帖子元数据嵌套在“用户”下,这是一个不断增长的嵌套列表。每次在“用户”下发生某些变化时,侦听器都会触发以更新客户端,并且所有这些数据都将在每个响应中传输。您可以考虑根据作者的 uuid 从“帖子”节点获取帖子数据。

    【讨论】:

    • 你的意思是,不是通过唯一的 postId 获取帖子数据,而是通过作者的 uid 获取它?那么,如果用户有多个帖子,你会如何区分帖子呢?
    • 您可以将作者的 uuid 复制为一个节点,而不是将其他根作为“帖子”,并将帖子作为子节点。这样,您的获取是“获取该用户的所有帖子”而不是“获取有关该用户的所有信息,包括他们的所有帖子”。也可以更简单地为帖子使用 RecyclerView。
    猜你喜欢
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多