将MySql中每个用户的所有聊天消息存储在单个字段中作为单个JSON对象数组

问题描述 投票:0回答:1

我发现了两种在MySql数据库中存储用户聊天消息的方法(用于1对1聊天):


1. 将每条消息作为一行存储在名为“聊天”的表中。这些列存储发送消息的用户 ID、消息接收者的 ID、消息正文、发送消息的日期和时间以及消息是否被看到。

  • 这种方法的问题是,如果我将每条消息存储在一行中,就会有太多行。所以我在想,每当用户登录或刷新页面时,我的网络应用程序检索这么多行是否会节省时间?

2. 另一种方法是将 2 个用户之间的所有聊天消息存储在单个字段中作为单个 JSON 对象数组。在数组中,每个对象都是一条消息。

  • 这种方法的好处是,Web 应用程序只需检索一行即可获取 2 个特定用户之间的所有消息。这样不是很省时间吗?

应该遵循哪种方法?请帮忙。预先感谢。

mysql json chat message
1个回答
0
投票

严格来说,您的问题没有单一的正确答案。这取决于您的应用程序如何查询数据。

如果应用程序始终查询聊天消息的完整线程,那么也许将它们以 JSON(或任何其他格式)存储在一起会更有效。

但是如果应用程序有时需要:

  • 根据某些标准获取消息子集(例如,少于 30 天的消息)。
  • 在消息中搜索关键字,尤其是在多个对话中搜索。
  • 使旧消息过期、存档或删除。

然后将它们存储在单独的行中可能会更好。

当您不尝试将 SQL 表达式或逻辑应用于单个行和列中的内容时,SQL 效果最佳。 IE。没有子串。将每个字符串视为单个原子值会更好。

如果您需要存储相似值的集合,并打算访问集合中的各个值,请将它们存储为行集。

© www.soinside.com 2019 - 2024. All rights reserved.