mysql - 大型聊天应用程序 Mysql 数据库消息存储 每条消息 1 行或将整个线程附加到 1 个长文本字段

标签 mysql sql database bigdata chat

正在使用 mysql 数据库开发一个大型聊天应用程序,对话一次只能在 2 个人之间进行。 寻找关于哪些数据库模式选项性能更好的意见。

选项 1。每条消息/响应插入一行的传统方法。 只需插入一个没有事先查找但重建的数据库
聊天线程需要 ORDERBY

选项 2。或者将每条消息附加到单个消息字段。 选择会更快,因为不需要 ORDERBY 然而,每条新消息都会首先进行查找

使用选项 2 时,数据库中的总行数也会减少

有什么想法吗?

最佳答案

这完全取决于您想对该字段执行什么操作。但在几乎所有情况下,第一个解决方案(每个对话单独一行)是正确的方法。

如果您将对话视为“blob”,则您只想使用第二种方法(所有这些方法都使用一个字段)。也就是说,如果您不想选择特定邮件,请在邮件内搜索,等等。从本质上讲,该列将是消息的存档,而不是与其他列一样有用的东西。

我还应该补充一点,在对话中,将消息存储在单个列中会丢失消息发送时间和发送者的信息。当然,您可以尝试封装它,例如使用 JSON 列。但何苦呢? SQL 已经拥有表示此类信息的良好机制。

关于mysql - 大型聊天应用程序 Mysql 数据库消息存储 每条消息 1 行或将整个线程附加到 1 个长文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48973782/

相关文章:

MySQL 列 : Change existing phone numbers into specific format?

javascript - jquery get 语法与 php 和 mysql 进行输入验证

集中数据访问或变量

php - MySQL GROUP BY 花费大量时间来获取记录

javascript - Mysql查询时间问题?

php - 如何使用php从特定电子邮件地址获取邮件信息并将标题信息存储到mysql数据库中

mysql - 哪个数据库用于存储文件路径?

java.sql.SQLException : Invalid value for getShort() - ' '

mysql - SQL查询和计算;正确格式化查询以仅选择 id

sql - 如何使用 SQL Server 查询从单词中分离字符和数字