Ваш подход совершенно действителен. По сути, вы создаете механизм очереди, чтобы отделить анализ от загрузки. Ваше веб-приложение проверяет загрузку и затем возвращается к пользователю, записав запись в очередь в БД.
Анализ должен выполняться как демон, который работает непрерывно, или, возможно, как задание cron, которое запускается каждые x минут / секунд. Через заданный интервал он просматривает очередь заданий, чтобы увидеть, есть ли работа, которую нужно выполнить, если она есть, то она обрабатывает ее. По завершении ваш демон обновляет базу данных, чтобы пометить задание как выполненное, и, возможно, записывает новые данные, относящиеся к анализу, в другую таблицу.
Не забывайте, что если у вас есть несколько демонов обработки в фоновом режиме, вам также необходимо пометить задание как «запущенное», чтобы второй процесс не заканчивался дублированием работы.
Когда пользователь возвращается на страницу, отображается новый статус. Это может быть выполнено «вживую» с помощью Ajax-опроса, как вы предлагаете, или вы можете посмотреть, как сохранить живое соединение открытым, используя подход Comet (http://en.wikipedia.org/wiki/Comet_%28programming%29).