个性化阅读
专注于IT技术分析

Firebase实时数据库中的数据组织

本文概述

在上一节中, 我们了解了如何设置Firebase控制台和Android应用程序以使用实时数据库。在本节中, 我们将讨论如何在Firebase或Firebase实时数据库中组织数据。我们已经知道Firebase中的数据是以JSON文件格式存储的。那么, Firebase实时数据库中JSON格式的含义是什么?

Firebase实时数据库中的数据组织

数据库结构

创建结构良好的数据库需要大量的前瞻性工作。这意味着我们需要计划如何保存数据并在以后检索数据, 以使该过程尽可能地容易。

在Firebase实时数据库中, 数据存储为JSON对象。我们可以将数据库视为云托管的JSON树。没有表和记录, 这意味着它是一个NoSQL数据库。可以将存储的数据表示为数据库中与可用JSON类型相对应的某些本机类型, 以帮助我们编写更具可维护性的代码。当我们将数据添加到JSON树时, 它成为现有JSON结构中具有关联键的节点。我们可以提供自己的密钥, 例如用户ID或名称, 也可以使用push()函数将其提供给我们。

让我们看一个示例, 以了解数据在JSON树的Firebase实时数据库中的外观。让我们考虑为聊天应用程序存储数据的示例。该聊天应用程序允许用户存储基本个人资料和联系人列表。用户配置文件将位于“用户/ $ uid”之类的路径上。用户是其中的一个节点, 并且将具有与ID关联的一种主键。因此, 我们可以唯一地访问每个。

{
  "Users": {
         "Student":{
                   "name":"Shubham Rastogi", "contacts":{"Faculty":true}, }, "Faculty":{?}, "Staff":{?}       
  }
}

用户下的所有内容都是用户的特定节点, 我们将使用诸如Users.Students, Users.Mstudent和Users.Tsudent之类的引用来访问它们。这是基本的树结构, 其外观和我们注意到的是它有很多嵌套。在Cloud中, Firestore没有太多的嵌套, 并且嵌套会导致一些性能问题。

因此, 在上面的示例中, “学生”是“用户”下的一个节点。名称和联系人是“学生和教师”下的节点, “职员”是“用户”下的节点。

避免嵌套数据

嵌套会导致某些性能下降。因此, 我们必须尽可能避免嵌套数据。这是必要的, 但我们避免使用它, 尤其是在我们拥有大型数据集的情况下, 因为这可能会降低性能。我们必须尝试使我们的数据结构尽可能平坦。

例:

{
     "Chats":{
          "One":{
               "title":"srcmini", "message":{
               "m1":{
                      "sender":"Shubham", "message":"Send your weakly report"
	   }
               "m2":{?}
               //A very long list of messages
               }
          }, "Two":{?}
     }
}

这是一个嵌套不良的数据结构, 因为迭代Chats节点的子节点的子子节点需要获取对话标题列表。因此, 这可能需要数百兆的消息。在此示例中, 如果我们要遍历数据, 那么它将非常成问题。

展平数据结构

为了避免嵌套数据, 请尝试在我们的数据结构中展平。将数据拆分到单独的路径将是更好的方法。因此, 它可以根据需要有效地下载单独的呼叫。

{
  //Chats contain only meta info about each conversation
  "chats":{
    "one":{
      "title":"srcmini", "lastMessage":"Student:whatever", "timestamp":1459754193228
    }, "Two":{...}, "Three":{...}
  }, //Messages are seperate from data we may want to iterate quickly but still easily
  // numbered the messages and queried, and organized by chat conversation ID
  "messages":{
    "one":{
      "m1":{
        "name":"Faculty", "message":"Send your Report", "timestamp":1459754195874
      }, "m2":{...}, "m3":{...}
    }, "Two":{...}, "Three":{...}
  }  
}

赞(0)
未经允许不得转载:srcmini » Firebase实时数据库中的数据组织

评论 抢沙发

评论前必须登录!