如何在数据库中存储用户之间的消息?
How to store messages between users in database?
我正在为一个项目构建一个类似于消息传递应用程序的小型 e-mail,用户可以在其中向另一个人发送消息,其中包含会议时间等信息,我想知道如何存储所有交换的消息。
我的问题是:
- 我是否应该将所有用户之间的所有消息存储在一个数据库中 table(在每个用户登录时获取他们的消息会很昂贵)?或者每个用户都应该有一个个人 table 用于 his/her 消息(会有太多 table 消息)?
- 我还需要存储用户接受的事件。同样,这些应该是所有用户的一个 table 还是每个用户单独的 table(我需要经常检索它们)?
我在网站上搜索过其他类似问题,但大多数问题似乎都集中在 real-time 消息传递或特定实施技术上。
感谢您的帮助!
每个用户 table 是个坏主意。这意味着每个查询都会不同,并且对于每个新用户,您都需要修改数据库。这很难构建、难以维护,而且对您的数据库来说效率也很低。
因此,只需将其存储在一个 table 中即可。如果您有适当的索引(和适当的硬件),几百万行将不是问题。
如果您担心性能不佳,您可以删除非常旧的消息。或者您可以将它们移动到 'archive' table。如果用户想要查看最近的消息(过去一年左右),他们可以从正常的 table 中获取它,而较早的消息可以从另一个中获取。通常 acceptable 挖掘档案有点慢,所以如果 table 变得非常大可能没关系。
就是说,您已经提到了 e-mail。我会认真考虑检查实际 e-mail 和它附带的 post 框的可能性。有许多现有的实现,它是一个强大的协议,自互联网诞生以来就一直存在,所以也许你不应该重新发明轮子。
E-mail 可以有 headers(也可以自定义 headers)和多个部分,所以即使 'normal' e-mail 不够,您仍然可以使用 e-mail 作为自定义消息类型的传输层。
我正在为一个项目构建一个类似于消息传递应用程序的小型 e-mail,用户可以在其中向另一个人发送消息,其中包含会议时间等信息,我想知道如何存储所有交换的消息。 我的问题是:
- 我是否应该将所有用户之间的所有消息存储在一个数据库中 table(在每个用户登录时获取他们的消息会很昂贵)?或者每个用户都应该有一个个人 table 用于 his/her 消息(会有太多 table 消息)?
- 我还需要存储用户接受的事件。同样,这些应该是所有用户的一个 table 还是每个用户单独的 table(我需要经常检索它们)?
我在网站上搜索过其他类似问题,但大多数问题似乎都集中在 real-time 消息传递或特定实施技术上。
感谢您的帮助!
每个用户 table 是个坏主意。这意味着每个查询都会不同,并且对于每个新用户,您都需要修改数据库。这很难构建、难以维护,而且对您的数据库来说效率也很低。
因此,只需将其存储在一个 table 中即可。如果您有适当的索引(和适当的硬件),几百万行将不是问题。
如果您担心性能不佳,您可以删除非常旧的消息。或者您可以将它们移动到 'archive' table。如果用户想要查看最近的消息(过去一年左右),他们可以从正常的 table 中获取它,而较早的消息可以从另一个中获取。通常 acceptable 挖掘档案有点慢,所以如果 table 变得非常大可能没关系。
就是说,您已经提到了 e-mail。我会认真考虑检查实际 e-mail 和它附带的 post 框的可能性。有许多现有的实现,它是一个强大的协议,自互联网诞生以来就一直存在,所以也许你不应该重新发明轮子。
E-mail 可以有 headers(也可以自定义 headers)和多个部分,所以即使 'normal' e-mail 不够,您仍然可以使用 e-mail 作为自定义消息类型的传输层。