Цикл по базе данных MySQL с несколькими экземплярами браузера - PullRequest
0 голосов
/ 19 августа 2011

У меня есть список URL-адресов (изображений) в таблице MySQL, и я пишу некоторый код в Coldfusion, чтобы загрузить их и сохранить их на сервере.

Моя таблица выглядит примерно так:

картинка

идентификатор URL-адреса (0: не в процессе, 1: в процессе, 2: загрузка завершена)

Моя страница имеет простой индексный цикл, «i» от 1 до 100. Каждый раз, когда она выбирает запись со статусом = 0, загружает ее и устанавливает для этой записи статус = 2. Все работает нормально, когда у меня запущено 1 окно браузера,

Но чтобы все шло быстрее, я хочу запустить несколько экземпляров браузера.Когда я делаю это, хотя вторая страница браузера ничего не обрабатывает до тех пор, пока первая страница полностью не завершится.

Что мне нужно сделать, чтобы иметь возможность запускать несколько экземпляров браузера?Все они работают одновременно и никогда не получают одно и то же изображение.

Дополнительная информация о моей настройке:

.таблица рисунков использует движок InnoDB.max_user_connections установлено в 0;как на глобальном, так и на пользовательском уровне

Спасибо за ваше время!

1 Ответ

0 голосов
/ 19 августа 2011

Используете ли вы транзакции (неявно или явно)? Похоже, что происходит некоторая борьба за блокировку.

Вот как я недавно решил похожую проблему:

START TRANSACTION;
SELECT id, url, status FROM urls WHERE status = 0 LIMIT 1 FOR UPDATE;
-- Save the id and url in your app
UPDATE urls SET status = 1 WHERE id = [id]
COMMIT;
-- start downloading the URL. You can do a simple update to change the status from 1 to 2 when the download is complete.

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

...