当前位置: 首页 > 知识库问答 >
问题:

firebase实时数据库如何读取数据?

欧阳绪
2023-03-14

我正在一个聊天应用程序,其中消息存储在firebase实时数据库。现在,如果我创建一个如下所示的节点(Chats-Better-A-ID和-B-ID是自动生成的聊天室密钥),那么我想知道当用户S在聊天应用程序中打开与用户T聊天时,so数据库将只读取存储在Chats-Better-S-T-ID中的消息,而不会读取其他聊天室消息!?我说的对吗?如果是,那么它会降低定价吗?

chats-
      chats-Between-A-and-B-Id-
                 messageID1-…
                 messageID2-…
                 messageID3-…
                 ...
      chats-Between-o-and-p-Id-…
      chats-Between-s-and-t-Id-…
      chats-Between-x-and-y-Id-…

如果我存储如下所示的数据,那么如果用户S在聊天应用程序中打开用户T的聊天,那么数据库将读取整个消息和

cahts-
      messageID1-…
      messageID2-…
      messageID3-…
      ...
if(chat.getReceiver() == senderID && chat.getSender() == receiverId ||
   chat.getReceiver() == receiverId && chat.getSender() == senderID)
                          {
                             (mChatList as ArrayList<Chat>).add(chat) //show chats
                          }

编辑

我正在使用第二种方法(我从一个聊天应用教程中获得)。我们根据发送者和接收者对消息进行排序,但在阅读了@Sharath的答案后,我得到了这样的结果,如果我这样做,它将从聊天节点读取每一条消息,然后根据sender-reciver对它们进行排序,如果有来自所有用户的100万条消息,那么它将读取100万条消息,并对其中一些只针对2个用户进行排序!会让我变穷的。因此,我正在考虑使用第一种方法,我将从chat>>Roomidbetween2Users中获得消息,这样它就不会阅读其他人的聊天,并给我安全、可维护和负担得起的数据库。

共有1个答案

池庆
2023-03-14

在不知道firebase DB结构的情况下回答这个问题有点棘手。我做了一个假设,并概括了这个答案。

Firebase是一个非SQL数据库,它以树形结构或父子方式存储数据

在使用NoSQL数据库进行任何开发时,您应该考虑的主要重要逻辑是,您需要创建到最深节点的Firebase DatabaseReference。Firebase查询和读取被引用节点下的数据。

现在来到你的结构

chats-
      chats-Between-A-and-B-Id-
                 messageID1-…
                 messageID2-…
                 messageID3-…
                 ...
      chats-Between-o-and-p-Id-…
      chats-Between-s-and-t-Id-…
      chats-Between-x-and-y-Id-…

如果创建一个对chats节点的数据库引用,那么每个试图访问该聊天的节点都将读取其下的每个子节点,这些子节点还包括其他聊天。因此,为了有效使用,请创建对chats-between-a-and-b-id-的引用,以便您可以获得这两个用户下的确切消息列表

 类似资料:
  • 我正在尝试读取我的Flutter应用程序中的firebase实时数据库中的数据,并将其分配给模型类,但是,我在控制台中得到了以下错误。 下面是我到目前为止所做的代码 员工类别 我不知道我做错了什么,请帮我解决这个问题

  • 我已经花了几个小时阅读产品分支中的0和1。请在Firebase数据库有经验的人帮助我:(

  • 我正在使用Flutter,我想从我的实时数据库Firebase中检索一些数据。我的实时数据库Firebase中存储了以下数据: 如何从中获取每一条信息?例如,我只想得到“Tom”这个名字?

  • Firebase实时数据库似乎会在添加或删除新项目等时通知我。这很好,但如何获取之前通知我的所有现有项目? 例如,假设我的应用程序列出了数据库中的项目。我第一次启动了我的应用程序。然后创建了“项目1”和“项目2”。Firebase通知我“项目1”和“项目2”,因此我将它们添加到我的应用程序列表中。 现在,我的应用程序已关闭并重新启动。如果创建了新项目“项目3”,我会收到通知,但如何再次检索“项目1

  • 我有一个带有读数的数据库集合,每个新读数都需要检查,如果它不寻常,如果是,则需要发送警报。 所以我使用

  • 我从一个开发人员那里得到了一个基于Firabase Realtime DB的Ionic应用程序的代码。当尝试启动应用程序时,im会收到此错误消息。 [ng]src/app/data-service.service.ts(14,36)中出现错误:错误TS2339:类型“{apikey:String;authDomain:String;databaseUrl:String;ProjectId:Stri