聊天数据库模型
Chat database model
我正在致力于在 Spring-MVC 中实现聊天功能。这仅适用于私人聊天。现在有一种情况,我有 2 个用户在聊天。我想将他们的聊天记录存储在数据库中。我正在考虑如何保存它,以便我可以有效地搜索两个用户之间的对话。
目前我的想法是:
每条消息都有一个 messageid、messageTimeStamp、messageText 和一个标识符。现在这个标识符是 user1:user2 的字符串值。因此,当我想加载两个用户之间的对话时,我有一个已登录的 user1,因此我可以在存在标识符 user1 的数据库中搜索并将它们加载为历史记录。
加载个人聊天记录和开销时出现问题。这种方法听起来不错,欢迎任何建议。谢谢你。
我认为您的想法一开始还不错,但是使用标识符列将聊天用户合并到字符串值 'user1:user2' 中并不是很有效。稍后您将不得不使用字符串进行操作,并且您不能分别索引消息的发送者和接收者。
您可以将发送者和接收者的用户 ID 存储在不同的列中。
您可能会考虑的另一件事是有一个单独的 'conversation' 或 'chat' table 来存储用户之间的对话关系数据。然后,您引用消息 table 中的对话。所以你的 table 可能看起来像:
- 会话(id、user1、user2、时间)
- 消息(id,发件人,conversation_id,文本,时间)
一个好处是,当您只想操作对话时,例如计算或获取用户之间的活跃对话列表,这样效率会更高。
您可以找到更多示例,详细说明此类设计here。
我正在致力于在 Spring-MVC 中实现聊天功能。这仅适用于私人聊天。现在有一种情况,我有 2 个用户在聊天。我想将他们的聊天记录存储在数据库中。我正在考虑如何保存它,以便我可以有效地搜索两个用户之间的对话。
目前我的想法是:
每条消息都有一个 messageid、messageTimeStamp、messageText 和一个标识符。现在这个标识符是 user1:user2 的字符串值。因此,当我想加载两个用户之间的对话时,我有一个已登录的 user1,因此我可以在存在标识符 user1 的数据库中搜索并将它们加载为历史记录。
加载个人聊天记录和开销时出现问题。这种方法听起来不错,欢迎任何建议。谢谢你。
我认为您的想法一开始还不错,但是使用标识符列将聊天用户合并到字符串值 'user1:user2' 中并不是很有效。稍后您将不得不使用字符串进行操作,并且您不能分别索引消息的发送者和接收者。 您可以将发送者和接收者的用户 ID 存储在不同的列中。
您可能会考虑的另一件事是有一个单独的 'conversation' 或 'chat' table 来存储用户之间的对话关系数据。然后,您引用消息 table 中的对话。所以你的 table 可能看起来像:
- 会话(id、user1、user2、时间)
- 消息(id,发件人,conversation_id,文本,时间)
一个好处是,当您只想操作对话时,例如计算或获取用户之间的活跃对话列表,这样效率会更高。
您可以找到更多示例,详细说明此类设计here。