最小化来自webhook回调的{MIMQL连接

时间:2017-11-13 12:45:26

标签: php mysql api callback query-optimization

我正在开发一个项目,要求我的服务器x​​yz.com从abc.com(短信网关提供商)收到对xyz.com/callback.php的POST / GET响应。

以下是我目前如何处理callback.php上的回复

1。从abc.com接收POST数据(此帖子包含唯一ID)

2。连接到mysql数据库和UPDATE用户WHERE messageId = Same_ID_from_POST_data

这项工作和数据正在更新。但是由于成千上万的MYSQL连接导致CPU过载。这是因为每当有来自api服务器的每条消息的送达回执时,callback.php就连接到mysql并更新数据库。

最佳做法是尽量减少连接MYSQL的次数吗? 我正在考虑做以下事情,但我怀疑它是否有意义。

1。像以前一样从api服务器接收发布数据。

2。我只需使用以下代码

写入.txt文件,而不是更新mysql

$ query。="更新用户设置状态=' $ post_data_for_status' unique =' $ post_unique';

然后大约10分钟后,我使用cron运行一个使用mysqli_multi_query($ connection,$ query)的php文件来更新表,从而使它成为一个连接。更新后,我只需取消链接.txt文件

即使上述方法有效,我也不知道该怎么做。我相信还有更好的选择。

任何想法,请为长篇书信抱歉。

1 个答案:

答案 0 :(得分:0)

您正在寻找的内容听起来像是避免连接搅动,这是我们使用Java / J2EE Web应用程序中常用的“连接池”带来的好处之一。

PHP不提供连接池(AFAIK)。但是PDO和mysqli确实提供了“持久”连接,这提供了一些与连接池相同的好处(避免连接搅动)。

对于mysqli,将“p:”添加到mysqli_connect中的主机名。

http://php.net/manual/en/mysqli.persistconns.php

对于PDO,请在连接中包含PDO::ATTR_PERSISTENT => true

http://php.net/manual/en/pdo.connections.php

请注意,对于持久连接,MySQL连接会维护它的状态(会话变量,临时表,用户定义的变量等)。例如,如果客户端发出SET time_zone = '+00:00';或{{}等语句1}},后续客户端重用MySQL连接将继承SET @foo = 'bar';设置或用户定义变量time_zone值;对先前客户端所做的MySQL会话状态的任何更改。