我正在开发一个巨大的在线短信系统,用户从他们的用户面板发送消息,这些消息会发送到名为 messages_queue
的 mysql 表。 。
然后,系统获取队列行并在 Cronjob 中发送每条消息。当然,以非常快的方式发送消息很重要。
我在想,直接发送消息(根据用户请求)而不使用队列不是更好吗? (发送消息需要连接外部API)
我在考虑数据库 I/O 时发现了这一点。
这对数据库不是有压力吗?
编辑/回答:
我的问题主要是基于意见的问题。顺便说一句,为了将来的使用,我会写下我所做的和我得到的。在 @bansi 的评论中,我尝试对我的表建立索引,这就是我所看到的:
这就是我一开始得到的,例如:
SELECT * FROM users WHERE parent="admin"
//response:OK
//Time: 3.581s
要知道,3.581 秒对于一个查询来说是一个很长的时间。然后我尝试获取我需要的内容:
SELECT uname FROM users WHERE parent="admin"
//response:OK
//Time: 1.02s
好吧,这稍微好一点,但仍然不是我想要的。
所以,我尝试了这个:
在数据库中对可查询字段建立索引并在查询中使用 INDEX:
SELECT uname FROM users USE INDEX(parent) WHERE parent="admin"
//response:OK
//Time: 0.168s
是的,这就是我想要的。使用INDEX
和 specific needed fields
速度快了大约 30 倍,这正是我所需要的。
最佳答案
队列的优点是能够更快地响应用户,因此虽然短信发送速度没有更快,但用户会认为系统速度更快,因为他们点击了“发送”并得到了反馈立即地。您可以尝试将队列从数据库移至专用队列处理系统,例如 RabbitMQ。
关于PHP - 使用队列和 cron 作业还是直接处理请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45770846/