postgresql — PHP: выполнение SQL-запросов в фоновом режиме

Я использую PHP (Yii Framework) и Postgresql для БД. В основном wappstack. Я только что упомянул их, если они когда-либо беспокоятся об этой проблеме.

Во всяком случае, я пытаюсь добиться этого, у меня есть действие отправки:

public function actionSubmitData($id){//Execute Sql queries here

$this->render('view',array(
//some data
));
}

Проблема в том, что я буду обработка большого количества данных; Около 50 000 записей будут обработаны в каждой из 4 таблиц по 10 столбцов в каждой таблице, что довольно много. Сценарий использования состоит в том, что пользователь отправляет, затем операторы SQL выполняются в фоновом режиме, но представление «представление» уже должно отображаться, не требуя от пользователя ожидания обработки записей. Он / она может проверить это позже после обработки записей.

Обычный запрос сначала выполнял бы операторы sql, а затем отображал представление. Проблема в том, что страница занимает 3-5 минут. Страница никогда не загружается; и создание записей не закончено, просто появляется белая страница, когда запросы интенсивны.

Другими словами, как мне выполнить sql запросы в фоновом режиме? Предоставление пользователю возможности просматривать приложение еще во время запроса в процессе? А также где-то на заднем плане, записи обрабатываются? Какой обходной путь для этой проблемы? Спасибо!

0

Решение

Я бы посоветовал отправить ваши запросы (задания) в какую-нибудь систему обмена сообщениями, как RabbitMQ или же Gearman. Это позволит выполнять вашу работу параллельно. Вы даже сможете легко масштабировать свою работу.

2

Другие решения

Это должно быть сделано с помощью Cron Job.

  1. Пользователь отправляет данные.
  2. Система записывает все данные в некоторый временный файл для последующего использования.
  3. Пользователь перенаправлен на просмотр страницы, чтобы продолжить просмотр.
  4. Процесс задания Cron ищет новый файл, помечает его как in process и обработать это.
  5. Cron Job удаляет файл после обработки.

Поскольку Cron Job работает в CLI, вы не получите тайм-аут сценария.

1