繁体   English   中英

即时消息传递系统的Firebase / NoSQL模式

[英]Firebase/NoSQL schema for an instant messaging system

我正在为应用程序使用Firebase,并且内置的实时功能似乎非常适合即时消息传递。 我脑子里很难解决应该如何设置数据库。 理想情况下,它是这样的:

messages: {
  <messageId>: {
    from: <userId>,
    to: <userId>,
    text: <String>,
    dateSent: <Date>
    dateRead: <Date>
  }
}

这对于发送消息来说很好,但是读取消息线程变得困难。 我需要查询(可能很大)消息列表以查找与当前线程的发送者和接收者匹配的消息,然后按dateSent 如果使用Firebase的新查询API可以做到这一点,那么我还没有确切地知道如何做到这一点。

查询大量消息绝不是一个好主意。 如果您想要快速运行的Firebase / NoSQL应用程序,则需要对数据建模以允许快速查找。

在聊天场景中,这通常意味着您需要将聊天室建模为数据结构。 因此,与其存储一长串消息,不如分别存储每个聊天“房间”的消息。

messages
  <roomId>
    <messageId1>: "..."
    <messageId2>: "..."
    <messageId3>: "..."

现在,您无需查询即可访问聊天消息,只需ref.child(roomId).on(...

如果您想要一个持久的映射以确保相同的两个用户最终在同一个房间中,请查看在Firebase中管理聊天频道的最佳方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM