我需要构建一个系统(在PHP中),它在MSSQL上执行大量查询以检索结果,如下所示:
我有10个独立的查询,我需要在用户访问页面时运行(有些是大量的)。并行运行3个查询(队列中7个)的最具可伸缩性的解决方案是什么?当查询完成时,从队列中运行另一个查询?
我需要立即加载页面,并且在查询完成时,向用户显示该查询的响应(顺序不是那么重要)。
我考虑了:AJAX,beanstalkd,NodeJS,libevent和Gearman,或者将它作为java中的Web服务实现(使用线程和并行处理)。
PS:我还发现AJAX PUSH ENGINE (APE - http://www.ape-project.org/)
和xRML (http://www.xrtml.org/)
但从未使用过它
答案 0 :(得分:2)
注意 此答案适用于未特别询问MSSQL的问题的第一个修订
当使用mysqlnd驱动程序时,MySQL支持通过MySQLi进行异步查询。
将MYSQLI_ASYNC
(可用于mysqlnd)作为$resultmode
参数传递给mysqli_query()
异步执行查询。然后使用mysqli_poll()
和mysqli_reap_async_query()
来获取此类查询的结果。
另见http://blog.ulf-wendel.de/?p=170深入讨论mysqlnd的并行,后台和异步提取想法。
答案 1 :(得分:1)
我的解决方案是将查询作业放到beanstalk消息队列中,由后台进程(守护进程?)提供服务。作业完成后,结果集会缓存到某处。
加载的页面使用AJAX(在一种轮询循环中 - 例如,每10秒请求一次)从服务器端应用程序中找出结果是否准备就绪(通过在缓存中查找结果集) )。
当结果可用时,服务器端应用程序将它们发送到将它们加载到div中的页面。