如何使每个查询中带有 LIMIT 的 SQL 查询结果不同?
我有以下 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您尝试过更新/返回吗?
Have you tried for update/returning?
跳过 1500 行并获取接下来的 500 行
http://www.postgresql.org /docs/8.3/interactive/queries-limit.html
Skip 1500 rows and take the next 500
http://www.postgresql.org/docs/8.3/interactive/queries-limit.html