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

标签 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 倍,这正是我所需要的。

最佳答案

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

关于PHP - 使用队列和 cron 作业还是直接处理请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45770846/

相关文章:

php - 从 Urban Airship 中获取设备 token

php - "Tie"已上传图片至其余部分

php - 将二进制数据插入数据库时​​出错

java - 查询两个以上的实体

php - 疯狂的 crond 行为。不断制作失效的 bash 进程

php - 如何在 MySQL Select 语句中使用 BETWEEN 的 PHP 数组?

php - jQuery 可排序网格到 MySQL 数据库 PHP

java - 输入整数时,整数不会保存在 SQL 中

spring - 如何从 db 加载 cron 表达式并使用 Spring 重新安排它?

php - 如何在 Linux 中激活 Drupal Cron 任务?