我一直在绞尽脑汁想弄清楚如何编写一个能够实现以下功能的消息传递系统:
- 多个收件人,收件人不能看到其他收件人,只能看到发件人。在发送的消息中,发送方看到消息在一个线程中发送给多个接收方,而不是在10亿个单独的线程中。
- 相对轻量级的查询(我们有相对20,000个用户-大约10%的用户定期同时向200-300人发送消息)。
我们当前的系统效率非常低,查询过多的连接导致服务器崩溃。我正在寻找关于在PHP和MySQL中制作可伸缩的线程消息传递系统的概念性建议-哪种数据库结构是最好的,如何存储收件人,查询的最佳实践。有人能帮忙吗?!
谢谢!
这听起来像是一个真正的消息队列系统,如RabbitMQ或其他任何数量的消息队列。在尝试编写自己的代码时,必须充分理解和处理一些大而复杂的问题,这些问题并不是微不足道的。至少,为了感受所提供的动力和功能,值得试用一两个。
一旦你沿着消息队列路由走下去,你会想要研究一个被称为发布/订阅的概念,它将使每个订阅者(或接收者)彼此分开。在此之后,如果需要,可以为每个订阅者创建数据库表(甚至是完全独立的数据库)。
看起来应该从三个表开始,一个接收者表、一个消息表和一个message_receiver多对多映射表。像这样:
接受者
- recipient_id <
- 名称/gh>
- message_id
- message_text
message_recipient
- message_id
- recipient_id
请确保在message_receiver表的两个字段上都创建了索引,然后它将成为所有消息查询的焦点。
你试过类似的方法吗?这是最简单、最直接的。