Как сделать результат SQL-запросов с LIMIT разным в каждом запросе? - PullRequest
0 голосов
/ 12 мая 2011

У меня есть следующий SQL:

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

- * 500 - это только пример

Я делаю веб-сканер, и есть таблица со ссылками.Этот SQL возвращает ссылки для посещения, но не все из них, только количество, определенное в предложении limit.

Я буду использовать потоки, и если первый выполнит этот запрос, он получит первые 500 ссылок, еслиВторой поток выполнит тот же запрос, он получит следующие 500 ссылок.Другими словами, первый thead получает ссылки от 1 до 500, второй поток получает от 501 до 1000, третий поток получает от 1001 до 1500 и т. Д.

МОЖЕТ БЫТЬ, ему не нужно работать с потоками, но на разных компьютерах, работающих одинаковоприложение.Я не знаю, нужно ли создавать поле в таблице, чтобы установить, что строка использовалась другим потоком / приложением, или я могу сделать это только с SQL / СУБД.Я использую PostgreSQL.

Другими словами, ОПЯТЬ, мне нужно заблокировать проверенную строку, чтобы она не появлялась в другом запросе.

Ответы [ 2 ]

0 голосов
/ 12 мая 2011

Пропустить 1500 строк и взять следующие 500

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

http://www.postgresql.org/docs/8.3/interactive/queries-limit.html

0 голосов
/ 12 мая 2011

Вы пытались обновить / вернуть?

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 *;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...