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

Javascript 即时消息系统的Firebase/NoSQL模式,javascript,firebase,database,nosql,Javascript,Firebase,Database,Nosql,我正在使用Firebase作为应用程序,内置的实时功能似乎非常适合即时消息。我只是在脑子里苦思冥想如何建立数据库。理想情况下,是这样的: messages: { <messageId>: { from: <userId>, to: <userId>, text: <String>, dateSent: <Date> dateRead: <Date> } } 消息:{ : {

我正在使用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聊天示例作为基础,但将聊天室限制为两个用户之间的讨论?如何防止在相同的两个用户之间打开重复的“聊天室”?请参阅