我正在尝试了解使用Firebase数据库为聊天应用程序(基于网络)存储和检索用户与用户对话的最佳数据库结构。
我目前的计划是为每个聊天提供自己的ID,该ID可以通过组合两个聊天参与者的唯一Firebase ID(例如UserID1_UserID2
)来创建,例如:FQ5d0jwLQDcQLryzevBxKrP72Bb2_GSIbxEMi4jOnWhrZaq528KJKDbm8
此聊天ID会存储在数据库中,并包含两个参与者之间发送的消息。
示例布局:
MYAPP
|_______conversations
| |_____UserID1_UserID2
| | |
| | |__OshwYF72Jhd9bUw56W7d
| | | |__name:"Jane"
| | | |__text:"Hello!"
| | |
| | |__KbHy4293dYgVtT9pdoW
| | |__PS8tgw53SnO892Jhweh
| | |__Qufi83bdyg037D7RBif
| | |__Gicuwy8r23ndoijdakr
| |
| |_____UserID5_UserID16
| |_____UserID8_UserID7
| |_____UserID3_UserID8
|
|_______users
每当用户登录应用时,他们都会看到他们的联系人列表。当他们选择一个聊天时,我会使用一些Javascript来组合他们和他们选择的朋友的Firebase ID来生成聊天ID。然后,可以在数据库中创建此聊天ID(如果这是他们第一次聊天),或者它将用于从数据库加载之前已交换的消息(如果他们之前已经聊过)。
我的问题是,这是正确的使用方法吗?如果我使用这种方法,可能会遇到什么问题?例如,如果我将来尝试实施群组对话(超过2人),我会遇到问题吗?
对于使用Firebase / a no SQL数据库的个人(和群组)聊天应用程序的任何帮助或正确数据库布局逻辑的示例,我将非常感激。
提前谢谢!
答案 0 :(得分:0)
我想指出的一个最重要的" 规则"创建NoSQL数据库时要考虑的是
在视图后构建数据。
这意味着数据必须以这样的方式构建,当您想要在视图(可能是您的html页面)上显示它时,您只需进行一次阅读。
因此,为了找到构建数据库的最佳方法,您必须先查看您的视图。并试着想象一下如何读取数据(直接读取和查询)。
Altought您当前的结构看起来很好(对于您现在正在构建的内容),是的,您在创建群组聊天时可能会遇到一些问题。我建议使用这样的东西:
您会注意到,通过这种方式,您可以轻松地为每个聊天添加更多参与者。请注意,这不应该是您唯一的节点。您必须创建其他节点,如用户(存储用户详细信息)和消息(存储每个聊天消息)等 为了帮助您,我建议您观看David East's Firebase Database For SQL Developers。