如何使每个查询中带有 LIMIT 的 SQL 查询结果不同?

发布于 2024-11-07 04:39:53 字数 522 浏览 0 评论 0原文

我有以下 SQL:

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

--*500 只是

我正在制作网络爬虫的一个示例,并且有一个带有链接的表。此 SQL 返回要访问的链接,但不是全部,仅返回 limit 子句中定义的数量。

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

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

换句话说,我需要锁定查询的行,以免出现在另一个查询中。

I have the following SQL:

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

--*500 is only a example

I'm making a webcrawler and there is a table with links. This SQL returns the links to visit, but dont all them, only the quantitiy defined in the limit clause.

I will use threads and if the first execute this query, it will obtains the first 500 links, if the second thread execute the same query, it will obtains the next 500 links. In other words, first thead obtains links 1 to 500, second thread obtains 501 to 1000, third thread obtains 1001 to 1500 and so on.

MAYBE it's dont need works with threads, but with different computers running the same application. I dont know if a need create a field in the table to set that row was in use by another thread/application or I can do this only with SQL/DBMS. I'm using PostgreSQL.

In other words AGAIN, I will need lock a consulted row to not appears in another query.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

醉南桥 2024-11-14 04:39:53

您尝试过更新/返回吗?

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 *;

Have you tried for update/returning?

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 *;
寻找我们的幸福 2024-11-14 04:39:53

跳过 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

Skip 1500 rows and take the next 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文