编码线程多收件人邮件系统的最佳实践?

时间:2011-04-20 04:10:34

标签: php mysql query-optimization messaging

我一直在试图弄清楚如何编写能够满足以下条件的消息传递系统:

  1. 多个收件人,收件人无法看到其他收件人,但只能看到发件人。在发送的邮件中,发件人会在一个线程中看到发送给多个收件人的邮件,而不是十亿个单独的帖子。
  2. 相对轻量级的查询(我们有相对20,000的用户 - 大约10%的用户会定期向200-300人发送消息)。
  3. 我们当前的系统非常低效,并且查询会通过过多的连接来杀死我们的服务器。我正在寻找关于在PHP和MySQL中构建可扩展的线程消息传递系统的概念性建议 - 最好的数据库结构类型,如何存储收件人,查询的最佳实践。有人可以帮忙吗?!

    谢谢!

2 个答案:

答案 0 :(得分:3)

这听起来像是一个真正的消息排队系统的工作,例如RabbitMQ或任何数量的其他消息队列。在尝试编写自己的代码时,必须完全理解和处理大型复杂问题,这些问题并非易事。至少,为了感受所提供的功能和能力,值得在一两个轮胎上踢轮胎。

一旦您沿着消息队列路线走下去,您将需要研究一个称为发布/订阅的概念,它将使每个订户(或接收者)彼此分离。在此之后,如有必要,可以为每个订户创建数据库表(甚至是完全独立的数据库)。

答案 1 :(得分:1)

似乎启动的地方只是三个表,一个收件人表,一个消息表和一个message_recipient多对多的映射表。像这样:

收件人

  • recipient_id
  • 名称
  • 电子邮件

消息

  • MESSAGE_ID
  • MESSAGE_TEXT

message_recipient

  • MESSAGE_ID
  • recipient_id

确保在message_recipient表的两个字段上创建索引,然后它成为所有消息查询的焦点。

你尝试过类似的方法吗?这是最简单,最直接的。如果这不起作用,可能会调整它。