即时消息系统的Firebase / NoSQL架构

时间:2016-03-23 15:26:50

标签: javascript firebase database nosql

我正在使用Firebase作为应用,内置的实时功能似乎非常适合即时消息。我正在努力解决数据库应该如何设置的问题。理想情况下,它是这样的:

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

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

1 个答案:

答案 0 :(得分:2)

查询大量邮件从不是一个好主意。如果您需要快速运行的Firebase / NoSQL应用程序,则需要对数据建模以便快速查找。

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

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

现在,您可以在不查询的情况下访问聊天消息,只需ref.child(roomId).on(...

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