【问题标题】:Messaging App Database Structure for FirebaseFirebase 的消息传递应用程序数据库结构
【发布时间】:2017-12-23 00:23:27
【问题描述】:

我正在使用 Firebase 构建应用。该应用程序的功能之一是聊天功能,用户可以在其中向其他用户发送消息 - 没什么特别的,只是基于文本的一个用户对一个用户的消息传递。所有描述如何实现此功能的在线教程(例如this onethis one)都使用匿名身份验证,因此许多原则似乎并不适用。我让用户在使用此功能之前进行身份验证。

看来,我拥有的两个主要功能是能够在我的应用程序的 JSON 数据库结构中修改特定路径的内容(添加、编辑、删除、更改顺序),并在客户端观察这些更改他们发生了。我可以轻松地将每条消息放在同一个子项中,并监听消息子项的任何更改,然后通过查找与当前用户 ID 关联的消息,将每条消息解析为客户端的对话。但是,这种方法似乎效率低下,因为在我看来我必须过滤掉很多多余的消息。

描述观察结构应该如何工作的一般流程、我需要在每条消息中包含的内容以及如何有效地分类到单独的对话中将非常有帮助。

【问题讨论】:

    标签: ios database firebase database-design


    【解决方案1】:

    大多数聊天应用都使用聊天室的概念,可以是用于直接对话的 1:1 聊天室,也可以是用户组之间的命名聊天室。

    您将每个房间建模为数据库中的一个节点,在房间 ID 下(仅)使用该房间的消息:

    chatrooms
      roomdid1:
        msg1: { from: ..., text: ..., timestamp: ... }
        msg2: { from: ..., text: ..., timestamp: ... }
        msg3: { from: ..., text: ..., timestamp: ... }
      roomdid2:
        msg4: { from: ..., text: ..., timestamp: ... }
        msg5: { from: ..., text: ..., timestamp: ... }
        msg6: { from: ..., text: ..., timestamp: ... }
    

    要为一个房间加载消息,你只需听那个房间,例如/chatrooms/roomid1.

    有关基于房间内用户的房间命名约定的想法,请参阅http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-channels-in-firebase

    【讨论】:

    • 感谢您的指导,这很有帮助。我唯一的想法是,手动解析所有聊天室并根据聊天室 ID 查看用户是否在一个聊天室中可能会变得非常慢(当他们开始填写数据时,下载它们可能会变慢)。创建另一个仅包含聊天室 id 的节点并通过该节点进行搜索是否是一种好习惯?
    • 那确实是个坏主意。您通常会通过 UID 获得每个用户的房间列表。所以:/userrooms/$uid/roomid1: true/userrooms/$uid/roomid2: true
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 2016-10-20
    • 2011-11-26
    • 2020-12-31
    • 2021-07-12
    • 2018-06-01
    • 1970-01-01
    相关资源
    最近更新 更多