PHP可以在Apache环境中发出多处理的mysql查询吗?

Stu*_*Stu 6 php mysql apache lamp

我有一个包含4个内核的数据库服务器和一个运行PHP的Web服务器.我希望一个PHP脚本能够向数据库服务器发出查询,以便它们在数据库服务器上并行执行,每个mysqld进程一个.通常在PHP中执行此操作:

$sql = new mysqli( [insert connection parameters] );
$sql->query( "SELECT 'Complex Query A'" );
$sql->query( "SELECT 'Complex Query B'" );
$sql->query( "SELECT 'Complex Query C'" );
$sql->query( "SELECT 'Complex Query D'" );
Run Code Online (Sandbox Code Playgroud)

但这些都是串行运行的,只使用一个mysqld进程.在此应用程序中,每个查询(A到D)正在处理数据的不同部分,但处理同一组InnoDB表.

一种可能的解决方案是对apache进行AJAX调用,将其分解为可能并行运行的子脚本,但我猜测Apache将按顺序处理这些ajax调用,每个客户端使用一个httpd进程.

有没有办法实现这个目标?有没有人有mysqlnd MYSQLI_ASYNC功能的经验?它们可以与单个数据库服务器和mysqli连接并行工作吗?

目的:我们运行生成图表的实时分析工具,我想利用我们数据库的处理能力来加速需要时间的查询.

Cra*_*ack 6

您需要的是异步查询执行.当你有了新的mysqlnd驱动程序时,可以从PHP 5.3开始- 然后你就可以将MYSQLI_ASYNCflag 传递给query()方法了.脚本执行将继续,无需等待查询完成.PHP手册中提供了一个很好的用法示例,用于该poll()方法的注释.

对于要并行执行的每个查询,您将需要单独的MySQL连接.