2011-08-25 37 views
6

我有一个具有4个内核的单个数据库服务器和一个运行PHP的Web服务器。我希望一个PHP脚本能够向数据库服务器发出查询,以便它们在数据库服务器上并行执行,每个mysqld进程上一个。通常在PHP中,你这样做:PHP可以在Apache环境中发出多重处理的mysql查询吗?

$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'"); 

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

一个可能的解决方案是让AJAX调用Apache将它分解为子脚本威力并行运行,但我猜Apache会处理这些Ajax调用顺序与每个客户端一个httpd进程。

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

目的:我们运行生成图形的实时分析工具,并且希望利用数据库的处理能力来加快需要时间的查询。

回答

6

你需要的是异步查询执行。当您有新的mysqlnd驱动程序时,可以从PHP 5.3开始 - 然后您可以将MYSQLI_ASYNC标志传递给query()方法。脚本执行将继续,而不会等待查询完成。在poll() method的评论中,PHP手册中有一个很好的使用示例。

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

+0

我建议,以及在我的问题,但你确定这在使用单个连接时有效吗?这不需要多个连接到两个或更多不同的服务器? – Toxikman

+0

是的,它需要多个连接 - 每个查询一个连接。我添加了一个链接到'mysqli_poll()'文档,它有一个例子。 – Crack