2011-05-12 88 views
0

我有以下SQL:如何在每个查询中使用限制不同的SQL查询结果?

SELECT id, url 
FROM link 
WHERE visited = false 
ORDER BY id 
LIMIT 500; 

- * 500仅仅是一个例子

我正在做的WebCrawler,并有一个带有链接的表。这个SQL返回要访问的链接,但不是所有的链接,只有限制条款中定义的数量。

我将使用线程,如果第一个执行此查询,它将获得前500个链接,如果第二个线程执行相同的查询,它将获得下一个500个链接。换句话说,首先获得链接1到500,第二个线程获得501到1000,第三个线程获得1001到1500等等。

MAYBE它不需要使用线程,但使用不同的计算机运行相同的应用程序。我不知道是否需要在表中创建一个字段来设置该行被另一个线程/应用程序使用,或者我只能使用SQL/DBMS来完成此操作。我正在使用PostgreSQL。

换句话说,再次,我将需要锁定一个咨询行不会出现在另一个查询中。

+0

偏移或领域,什么是更好的?另外一个解 – 2011-05-12 20:43:27

回答

0

你试过更新/返回?

update link 
set visiting = true 
from (
    select id 
    from link 
    where visiting = false 
    and visited = false 
    limit 500 
    for update 
    ) as batch 
where batch.id = link.id 
returning *; 
+0

现在我认为这是最好的方法。感谢:D – 2011-05-19 16:53:55