2011-05-12 92 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