我正在尝试为聊天系统构建一个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已登录,我可以检索他发送的所有消息。但是,我无法知道消息之前是否有任何答复,因此我无法检索到最后一条消息。
我如何才能真正对其进行重组,以实现上面提到的目标?有什么建议么?
谢谢!
听起来您想:
如果您有这些要求,我将在您的数据库中精确建模。
因此,对于每个聊天室(一组特定用户之间的聊天),为该聊天室的消息建模:
chats: {
$roomId: {
$messageId: {
senderId: "..."
message: "..."
}
}
}
现在,为每个用户建模一个单独的聊天列表和最新消息:
userRooms: {
$uid: {
$roomId: {
"message: "..."
}
}
}
现在,每当用户将消息发布到会议室时,您都需要将该消息推送到该聊天室,/chats/$roomId
并为该聊天室中的每个用户将该消息写入/userRooms/$uid/$roomId
(覆盖那里的现有消息)。
这种数据复制称为扇出数据,因为您正在数据库中的多个位置散布单个信息片段。它在NoSQL数据库中非常普遍,并且是它们如此之好扩展的部分原因:它们将写入复杂性与读取性能进行权衡。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句