gpt4 book ai didi

用于聊天应用程序的 Firebase 数据库结构

转载 作者:行者123 更新时间:2023-12-03 23:37:26 26 4
gpt4 key购买 nike

我正在尝试为聊天系统构建一个 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

上面的设计让我知道假设 userID1 登录,我可以检索他发送的所有消息。但是,我无法知道消息之前是否有任何回复,因此我无法检索最后一条消息。

我怎样才能真正重组它,以便我可以实现我上面提到的?有什么建议?

谢谢!

最佳答案

听起来您想要:

  • 用户之间有聊天“房间”
  • 显示每个用户的聊天室列表,以及该房间的最新消息

  • 如果这些是您的要求,我会在您的数据库中精确建模。

    因此,对于每个聊天室(一组特定用户之间的聊天),为该房间的消息建模:
    chats: {
    $roomId: {
    $messageId: {
    senderId: "..."
    message: "..."
    }
    }
    }

    现在,为每个用户建模一个单独的聊天列表和最新消息:
    userRooms: {
    $uid: {
    $roomId: {
    "message: "..."
    }
    }
    }

    现在,每当用户向房间发布消息时,您都需要将该消息推送到 /chats/$roomId 对于该聊天室中的每个用户,将消息写入 /userRooms/$uid/$roomId (覆盖那里的退出消息)。

    这种类型的数据复制称为扇出数据,因为您将单个信息片段散布到数据库中的多个位置。这在 NoSQL 数据库中很常见,这也是它们能很好地扩展的部分原因:它们用写入复杂性换取读取性能。

    关于用于聊天应用程序的 Firebase 数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47879031/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com