Вставить данные в базу данных, не дожидаясь этого - PullRequest
3 голосов
/ 05 декабря 2011

В моем php-скрипте я использую PDO для вставки данных csv в базу данных.

$sqlsmttempl = 'INSERT INTO %s (%s) VALUES (%s)';

Но всего несколько тысяч записей заняли довольно много времени. Как я могу предотвратить ожидание вставки клиентами?

Я пробовал INSERT DELAYED, ошибки нет, но, похоже, вообще нет ответов.

Есть намеки на это? Спасибо.

1 Ответ

1 голос
/ 05 декабря 2011

Единственный способ не заставлять клиента ждать, пока сервер завершит обработку, состоит в том, чтобы обработка выполнялась в другом процессе после отправки вашего ответа.

INSERT DELAYED - быстрый и грязный способ сделать это. Строки базы данных для вставки будут поставлены в очередь MySQL и вставлены позже. Это означает, что нет способа обнаружить или обработать ошибку значения, потому что после execute() строка фактически не была вставлена. Цикл по csv и выдача запросов все еще должны выполняться, пока клиент ждет.

Если это все еще слишком долго, вам нужно будет создать или использовать какую-нибудь очередь или очередь задач. В этой схеме запрос принимается и затем передается в длительный процесс или помещается в каталог, и веб-ответ отправляется немедленно. Между тем, другой процесс, выполняющийся на сервере, собирает запросы, обрабатывает их и затем записывает состояние где-то (например, в таблицу базы данных). Должна быть еще одна страница, на которую пользователь может перейти, чтобы отслеживать состояние своей задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...