【问题标题】:Correct Firebase database layout for a user to user (and group) chat app?用户到用户(和组)聊天应用程序的正确 Firebase 数据库布局?
【发布时间】:2017-05-23 19:14:54
【问题描述】:

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

提前谢谢你!

【问题讨论】:

  • 另请参阅我们的sample apps,其中包括功能齐全的聊天。

标签: firebase firebase-realtime-database


【解决方案1】:

作为创建 NoSQL 数据库时要考虑的最重要的“规则”之一,我想指出的是,您必须

在视图之后构建您的数据。

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

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

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

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

【讨论】:

  • 我也想到了这种方法...但是基于其中一个要求,您将如何隔离只有用户 1 和用户 2 而没有用户 3 的聊天?举个例子。我已登录并单击用户 2,并希望查看与该用户的聊天。
猜你喜欢
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 2019-02-12
相关资源
最近更新 更多