正确的Firebase数据库布局为用户提供用户(和组)聊天应用程序?

时间:2017-01-09 13:48:04

标签: firebase firebase-realtime-database

我正在尝试了解使用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数据库的个人(和群组)聊天应用程序的任何帮助或正确数据库布局逻辑的示例,我将非常感激。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

我想指出的一个最重要的" 规则"创建NoSQL数据库时要考虑的是

  

在视图后构建数据。

这意味着数据必须以这样的方式构建,当您想要在视图(可能是您的html页面)上显示它时,您只需进行一次阅读。

因此,为了找到构建数据库的最佳方法,您必须先查看您的视图。并试着想象一下如何读取数据(直接读取和查询)。

Altought您当前的结构看起来很好(对于您现在正在构建的内容),是的,您在创建群组聊天时可能会遇到一些问题。我建议使用这样的东西:

enter image description here

您会注意到,通过这种方式,您可以轻松地为每个聊天添加更多参与者。请注意,这不应该是您唯一的节点。您必须创建其他节点,如用户(存储用户详细信息)和消息(存储每个聊天消息)等 为了帮助您,我建议您观看David East's Firebase Database For SQL Developers