mysql - 如何在数据库中存储用户之间的消息?

标签 mysql database storage message

我正在为一个项目构建一个类似电子邮件的小型消息应用程序,用户可以向另一个用户发送包含 session 时间等信息的消息,我想知道如何存储所有交换的消息。 我的问题是:

  • 我是否应该将所有用户之间的所有消息存储在一个数据库表中(在每个用户登录时获取每个用户的消息的成本会很高)?或者每个用户应该有一个个人表格来存放他/她的消息(表格太多)?
  • 我还需要存储用户接受的事件。同样,这些应该放在所有用户的一张表中还是每个用户的单独表中(我需要经常检索这些)?

我在网站上搜索过其他类似的问题,但大多数似乎都关注实时消息传递或特定的实现技术。

感谢您的帮助!

最佳答案

每个用户一个表是一个坏主意。这意味着每个查询都会不同,对于每个新用户,您都需要修改数据库。这很难构建、很难维护,而且对于数据库来说效率也很低。

所以,只需将其存储在一张表中即可。如果您有适当的索引(和适当的硬件),几百万行不会成为问题。

如果您担心性能不佳,您可以删除非常旧的消息。或者您可以将它们移至“存档”表。如果用户想要查看最近的消息(过去一年左右的),他们可以从普通表中获取它,并且可以从另一个表中获取较旧的消息。挖掘文件的速度稍微慢一点通常是可以接受的,因此如果该表变得非常大也可能没问题。

也就是说,您已经提到了电子邮件。我会认真考虑检查实际电子邮件及其附带的邮箱的可能性。有许多现有的实现,并且它是一个自互联网诞生以来就一直存在的强大协议(protocol),因此也许您不应该重新发明轮子。

电子邮件可以有 header (也可以是自定义 header )和多个部分,因此即使“普通”电子邮件不够,您仍然可以使用电子邮件作为自定义类型消息的传输层.

关于mysql - 如何在数据库中存储用户之间的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30221717/

相关文章:

mysql - 在 MYSQL 中声明外键时出现语法错误(使用 innoDB)

javascript - 插入查询的语法不正确

java - 如何从 Android 的内部存储中获取图像数组

php - yii2 根据模型更新表单预选下拉选项

php - 无法在数据库中插入记录

sql-server - 如何使用 VBScript 从数据库复制到文本文件?

MySQL 还是 NoSQL?处理大量数据的推荐方法

regex - Dart/Flutter 读写列表列表 - 为什么我无法使用索引号访问列表列表中的对象?

python - 打印 MySQLdb 运行的实际查询?

php - 无法使用HTML读取网页上的Mysql数据