我正在开发一款聊天应用程序,其中消息存储在 Firebase 的实时数据库中。现在,如果我创建以下节点 ( chats-Between-A-and-B-Id 是自动生成的聊天室密钥 ),那么当用户 S 在聊天应用程序中打开与 T 的聊天时,数据库将仅读取存储在chats-Between-S-and-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的答案后,我得出结论,如果我继续使用它,它将读取聊天节点中的每条消息,然后根据发送方-接收方进行排序,如果有来自所有用户的100万条消息,那么它将读取100万条消息并仅为两个用户的部分消息进行排序!这会让我破产。因此,我考虑使用第一种方法,其中我将从chat>>roomIdBetween2Users获取消息,因此它不会读取其他人的聊天,并为我提供安全、可维护和经济实惠的数据库。
这是我的数据库图像,即聊天父节点包含所有用户的所有消息,并按照我在代码中提到的方式进行排序。 chats中已经有大约500多条消息。在未来运营中,这将变得非常危险。