【问题标题】:Firebase/NoSQL schema for an instant messaging system即时消息系统的 Firebase/NoSQL 架构
【发布时间】:2017-07-01 17:42:38
【问题描述】:

我将 Firebase 用于应用程序,内置的实时功能似乎非常适合即时消息传递。我只是很难在脑海中弄清楚应该如何设置数据库。理想情况下,它是这样的:

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

这对于发送消息来说很好,但是阅读消息线程变得困难。我需要查询(可能很大)消息列表以查找与当前线程的发送者和接收者匹配的消息,然后按dateSent 对它们进行排序。如果 Firebase 的新查询 API 可以做到这一点,那么我还没有弄清楚具体该怎么做。

【问题讨论】:

    标签: javascript firebase database nosql


    【解决方案1】:

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

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

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

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

    如果您想要确保相同的两个用户最终在同一个房间中的持久映射,请查看Best way to manage Chat channels in Firebase

    【讨论】:

    • 所以这意味着我应该基本上使用 Firebase 聊天示例作为基础,但将房间限制为两个用户之间的讨论?如何防止在相同的两个用户之间打开重复的“房间”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2011-09-26
    • 1970-01-01
    • 2010-09-09
    相关资源
    最近更新 更多