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

时间:2015-05-13 17:35:24

标签: mysql database storage messages

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

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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

每个用户的表格是个坏主意。这意味着每个查询都是不同的,并且对于每个新用户,您将需要修改数据库。这对于您的数据库来说很难构建,难以维护和低效。

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

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

那就是说,你已经提到了电子邮件。我会认真考虑检查实际电子邮件的可能性以及随附的邮箱。现有许多实现,它是一个强大的协议,从互联网的曙光开始就存活下来,所以也许你不应该重新发明轮子。

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