MySQL - 存储发送给大量用户的帖子

时间:2014-01-23 03:49:29

标签: mysql sql

我正在构建一个带有补充移动应用的网络应用。让我们说出于问题的目的,Web应用程序用于创建发送给所有或部分移动应用程序用户的消息。我正在尝试确定存储这些消息的最佳方式。

目前,我设置了一个用于存储消息的表messages和另一个用于存储每条消息的每个收件人记录的表recipients

例如,如果我的ID为1的邮件发送给三个用户alex, bill, chris,那么recipients表将如下所示:

recipients_id | message_id | username
1             | 1          | alex
2             | 1          | bill
3             | 1          | chris

message_idmessages的主键,usernameusers表中的一个字段(我实际上使用的是INT PK,但只是使用字符串对于这个问题)。

现在想象一下,不是三个用户,而是将消息发送给几百甚至几千个用户。这仍然可行吗?我知道MySQL表可以处理数百万条记录,但我只是想知道这是否是最有效的方法。

2 个答案:

答案 0 :(得分:1)

是的,这是在SQL中实现多对多关系的正确方法。

唯一的选择是以逗号分隔的列表。但是你受到了柱子大小的限制。加入这种类型的价值既困难又低效。

答案 1 :(得分:1)

你走在正确的轨道上,是的,我会在收件人表中使用user_id而不是username。 MySQL肯定能够处理这样的数十万条记录,仅受MySQL服务器上RAM数量的限制。

然后,要获取发送给特定用户的消息列表(例如用户ID 2),您可以使用简单的连接查询,如:

SELECT * FROM recipients LEFT JOIN messages ON messages.id = recipients.message_id WHERE recipients.userid = 2

或者获取特定消息的收件人列表(例如消息ID 3);

SELECT * FROM recipients LEFT JOIN users ON user.id = recipients.user_id WHERE recipients.message_id = 3

希望这会有所帮助:)