使用多个浏览器实例循环访问MySQL数据库

时间:2011-08-19 00:00:30

标签: mysql loops concurrency transactions multiple-instances

我有一个MySQL表格中的URL(图片)列表,我在Coldfusion中编写了一些代码来下载这些代码并将它们存储在服务器上。

我的表看起来像这样:

图片

ID 网址 状态(0:不在进程中,1:在进程中,2:完成下载)

我的页面有一个简单的索引循环,“i”从1到100.每次选择status = 0的记录时,下载并将该记录设置为status = 2.当我有1个浏览器窗口时,一切正常运行。

但为了让事情变得更快,我想运行多个浏览器实例。当我这样做虽然第二个浏览器页面没有处理任何东西,直到第一个完成。

我需要做些什么才能运行多个浏览器实例?它们都在同一时间运行,它们从不会拍摄相同的图片。

有关我的设置的更多信息:

。图片表使用InnoDB引擎 。 max_user_connections设置为0;全球和用户级别

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

您是在使用交易(隐式还是明确)?似乎存在一些锁定争用。

以下是我最近解决类似问题的方法:

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.

如果以上内容包含在循环中,它应该可以正常工作,并防止浏览器同时下载相同的图像。