用于聊天应用程序的Firebase数据库结构

超fkcb

我正在尝试为聊天系统构建一个Firebase数据库。我想要实现的是在用户成功登录后,他们将看到已发送给其他用户的消息列表。每个消息预览将显示最后一条消息。然后,用户可以在消息上选择以查看完整的聊天详细信息。它应该像Facebook Messenger一样工作。

我的设计结构如下:

chatMessage
    sender *(Assume this one is user)*
        threads
            threadID1
                messageID1
                    datetime, content, receiver, status
                messageID2
                    datetime, content, receiver, status
            threadID2
                messageID1
                    datetime, content, receiver, status
                messageID2
                    datetime, content, receiver, status
    sender *(Assume this one is admin)*
         threads
            threadID1
                messageID1
                    datetime, content, receiver, status
                messageID2
                    datetime, content, receiver, status

上面的设计使我知道用户ID1已登录,我可以检索他发送的所有消息。但是,我无法知道消息之前是否有任何答复,因此我无法检索到最后一条消息。

我如何才能真正对其进行重组,以实现上面提到的目标?有什么建议么?

谢谢!

弗兰克·范普菲伦

听起来您想:

  1. 在用户之间建立聊天室
  2. 显示每个用户聊天室的列表,以及该聊天室的最新消息

如果您有这些要求,我将在您的数据库中精确建模。

因此,对于每个聊天室(一组特定用户之间的聊天),为该聊天室的消息建模:

chats: {
  $roomId: {
    $messageId: {
      senderId: "..."
      message: "..."
    }
  }
}

现在,为每个用户建模一个单独的聊天列表和最新消息:

userRooms: {
  $uid: {
    $roomId: {
      "message: "..."
    }
  }
}

现在,每当用户将消息发布到会议室时,您都需要将该消息推送到该聊天室/chats/$roomId 为该聊天室中的每个用户将该消息写入/userRooms/$uid/$roomId(覆盖那里的现有消息)。

这种数据复制称为扇出数据,因为您正在数据库中的多个位置散布单个信息片段。它在NoSQL数据库中非常普遍,并且是它们如此之好扩展的部分原因:它们将写入复杂性与读取性能进行权衡。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

聊天应用程序中的Firebase实时数据库结构

用于 2 个节点的聊天应用程序的 Firebase 实时数据库规则

修复我的Firebase数据库聊天应用程序

博客应用程序的Firebase数据库结构

Firebase聊天应用程序setValue失败,公共数据库出现错误?

就我的聊天应用程序定价而言,Firebase Cloud Firestore 还是实时数据库?

如何使用Firebase数据库和Firebase通知为聊天应用程序构建通知系统

Polymer应用程序中的Firebase数据库结构-性能和用户/组/公共访问

调查样式应用程序的数据库结构

我可以将 Firebase 用于只有数据库操作的应用程序吗?

数据库设计问题...用于预订应用程序

适用于Android应用程序的数据库

如何为聊天应用程序分片数据实时数据库?

可以从应用程序外部访问Firebase数据库

Firebase数据库getInstance崩溃的应用程序

锁定Firebase数据库对特定应用程序的访问

Firebase数据库依赖项崩溃的应用程序

如何在聊天应用程序中构建Firestore数据库?

如何使用flutter和mysql数据库制作聊天应用程序?

如何捕获从数据库到C#的事件(聊天应用程序)

在为基本聊天Web应用程序制作mysql数据库模型时需要指导

如何为聊天应用程序中的民意测验设计数据库架构?

使用实时数据库优化聊天应用程序中的存储和带宽使用

实时可扩展聊天应用程序 - 我应该选择哪个数据库?

Firebase Realtime Database或Firestore用于聊天应用程序?

Android应用程序:在应用程序销毁之前修改Firebase数据库

加密数据库中数据的安全应用程序的体系结构

数据库应用程序崩溃

Swift-为聊天应用程序构建Firebase数据