【问题标题】:Closing & reopening mysql connection in after remote API replies在远程 API 回复后关闭和重新打开 mysql 连接
【发布时间】:2021-05-03 07:34:43
【问题描述】:
我正在开发一个后端应用程序,需要一些远程 API 请求,根据远程服务的负载,响应需要 1~3 秒。
这个后端每秒会收到很多请求,我正在努力实现我可以从我的服务器中获得的最佳性能。
是否应该在调用API之前关闭mysql连接,收到回复后再重新打开以释放一些资源?
如果我这样做了,会发生什么问题?
如果我无法再次连接该怎么办?
我必须在收到请求后存储和更新数据库。
我正在使用纯 PHP 和 MySQL (MySQLi)
【问题讨论】:
标签:
php
mysql
mysqli
database-connection
【解决方案1】:
如果您的应用程序必须执行一些与数据库无关的耗时任务,那么您应该关闭连接,以便您的 PHP 进程不会阻塞 MySQL 服务器上的资源。
您可以在 API 调用结束后打开新连接。这样做的明显缺点是您将失去执行交易的能力。一个事务不能在两个单独的 MySQL 会话中保持打开状态。
更好的选择是将长期运行的进程与主进程分离。有多种方法可以实现这一点。如果您可以在后台运行该过程,那么这将是最佳选择。缓存长时间运行的进程也是一个可行的选择。如果用户必须等待整个工作完成,那么您可以采用 2 或 3 步流程。
- 用户向服务器发送请求。您的 PHP 代码执行一些数据库操作并将用户重定向到第二步
- 另一个 PHP 进程调用 API 并且只执行与 API 相关的逻辑。没有建立数据库连接。完成后,应用程序会将用户重定向到最后一步。
- 您的 PHP 应用程序执行另一组数据库活动并将最终响应返回给用户。
当然,对于如此复杂的操作,您的应用程序更有可能失去事务正确性,因此您必须评估所有优点和缺点。
最后一点。如果您的服务器设置正确,那么您可用的 PHP 进程应该有相应数量的 MySQL 进程。这是为了确保如果您的 PHP 进程被 100% 使用并且每个进程都需要执行一些数据库操作,那么您的 MySQL 服务器不应该成为瓶颈。在这种情况下,为什么不让它变得简单,并在执行长时间运行的 API 调用时保持数据库连接打开?为您省去很多麻烦。