您好,匿名用户
随意问技术百科期待您的加入

如何快速遍历数据库

+1 投票

我有一个数据库,里面有1千万的数据,每条数据存放一个url,我要测试这个url是否是可以链接的,使用python实现,什么思路?
使用twisted还是gevent?
如果使用gevent,如何动态添加url,比如我gevent的pool设置为100,在数据库中取出数据的时候如何遍历最高效?

用户头像 提问 2013年 9月7日 @ Nero 上等兵 (377 威望)
分享到:

1个回答

+1 投票
 
最佳答案

都行,建议你用队列来序列化整个工作,redis这种kv数据库级的或者是gevent.queue这种协程级的或者是multiprocessing.queue这种跨进程的队列都行……

目测这个工作主要瓶颈在检查url是否正常(http code 2xx?),次瓶颈在从数据库读这10M条记录。
对于检查url的工作,可以通过gevent/twisted/多线程/多进程来并发,就像你说的pool设置到100。
对于从数据库读出记录,并行不见得比串行访问更快……

所以,开一个到两个reader从数据库读,开100个以上的checker去检查url就可以了。中间放一个queue用来通信。
是这样的结构: reader ---(写入)--> 队列 ---(读出)--> checker

至于队列用什么实现,不是很重要……因为瓶颈不在这儿……
从数据库读就很容易了,如果只有一个reader,就select * from table得到一个完整的数据集,遍历写入队列即可

用户头像 回复 2013年 9月7日 @ 苏尐沫 上等兵 (212 威望)
选中 2013年 9月7日 @Nero
提一个问题:

相关问题

0 投票
1 回复 59 阅读
用户头像 提问 2012年 12月1日 @ Karthus 上等兵 (227 威望)
0 投票
0 回复 17 阅读
用户头像 提问 2013年 11月18日 @ 爹妈罩我去战斗 上等兵 (131 威望)
+2 投票
1 回复 96 阅读
用户头像 提问 2013年 1月14日 @ mongodb 上等兵 (152 威望)
0 投票
1 回复 68 阅读
用户头像 提问 2012年 12月1日 @ Morgana 上等兵 (251 威望)
0 投票
1 回复 29 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...