PHP - 使用队列和cron作业还是直接处理请求?

时间:2017-08-19 11:13:35

标签: php mysql cron queue

我正在开发一个巨大的在线短信系统,用户可以从用户面板发送消息,这些消息将发送到名为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

是的,这就是我想要的。使用INDEXspecific needed fields的速度提高了约30倍,这正是我所需要的。

2 个答案:

答案 0 :(得分:1)

队列的优点是能够更快地响应用户,因此尽管短信发送速度不快,但用户会认为系统更快,因为他们点击“发送”并获得反馈立即。您可以尝试将队列从数据库中移出到专用的队列处理系统,如RabbitMQ。

答案 1 :(得分:1)

好吧,我之前使用MySQL排队,如果你不清理表,它会变得很慢,你可以使用它,但你总是清理已执行的行......

但是如果你正在寻找一个真正的队列系统,我会推荐RabbitMQ,你能用它做多少就很容易而且真的太棒了。