2012-02-21 3 views
3

Мне нужно построить систему (в PHP), что делает массовые запросы на MSSQL, чтобы получить результат следующим образом:Лучший способ сделать асинхронной обработки в PHP

У меня есть 10 независимых запросов, которые мне нужно работать, когда пользователь посещает страницу (некоторые из них массивны). Каково наиболее масштабируемое решение для одновременного запуска 3 запросов (7 в очереди), а когда запрос завершен, запустить другой из очереди?

Мне нужна страница для загрузки моментально, и по завершении запроса покажите пользователю ответ этого запроса (порядок не так важен).

Я принял во внимание: AJAX, beanstalkd, NodeJS, libevent и Gearman или реализовал его как веб-службу в java (используя потоки и параллельную обработку).

PS: Я также нашел AJAX PUSH ENGINE (APE - http://www.ape-project.org/) и xRML (http://www.xrtml.org/), но никогда не использовал его

+0

Кто-то изменил SQL на MSSQL на ваш вопрос (так что я пометил его как SQL-Server), какой тип базы данных вы фактически используете? –

+0

Извините, это был я .. Я использую MSSQL – pufos

ответ

1

Примечаниеэтот ответ для первого пересмотра вопроса, который не просил MSSQL в частности

MySQL поддерживает асинхронный запросы через MySQLi при использовании драйвера mysqlnd.

Передача MYSQLI_ASYNC (доступно с помощью mysqlnd) как $resultmode аргумент mysqli_query() выполняет запрос асинхронно. mysqli_poll() и mysqli_reap_async_query() затем используются для получения результатов от таких запросов.

Также см. http://blog.ulf-wendel.de/?p=170 для подробного обсуждения параллельных, фоновых и асинхронных идей выборки для mysqlnd.

+0

Спасибо за ответ – pufos

+0

Можете ли вы также использовать это для MSSQL? –

+0

@MattEllen no. Экземпляр ext/mysqli предназначен для баз данных MySql. Я не знаю, поддерживает ли MSSQL асинхронные запросы через ext/mssql. Это не похоже на документацию. – Gordon

1

Моим решением было бы поместить задания запросов в очередь сообщений beanstalk, которые будут обслуживаться фоновым процессом (daemon?). По завершении задания результирующие наборы кэшируются где-то.

Загруженная страница использует AJAX (в виде цикла опроса - например, запрос каждые 10 секунд), чтобы узнать из приложения на стороне сервера, если результаты готовы (что он делает, просматривая в кеше результат задавать).

По мере того, как результаты становятся доступными, серверное приложение отправляет их на страницу, которая загружает их в div.

+0

Вы имеете в виду AJAX long pull? AJAX - единственное решение для получения результата и динамического обновления страницы? – pufos

Смежные вопросы