多进程爬虫MySQL表单设计

作者: MintSakura | 来源:发表于2017-07-17 15:32 被阅读0次

<strong>先来一个例子:</strong>
<code>TABLES['urls'] = (
"CREATE TABLE urls ("
" index int(11) NOT NULL AUTO_INCREMENT," # index of queue
" url varchar(512) NOT NULL,"
" md5 varchar(16) NOT NULL,"
" status varchar(11) NOT NULL DEFAULT 'new'," # could be new, downloading and finish
" depth int(11) NOT NULL,"
" queue_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,"
" done_time timestamp NOT NULL DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP,"
" PRIMARY KEY (index),"
" UNIQUE KEY md5 (md5)"
") ENGINE=InnoDB")
</code>
<ul>
<li><strong>我们一个一个来解释吧:</strong></li>
<li>index我们设计为可以自增的模式;</li>
<li>url和md5都是UNIQUE的,保证了url不会重复,不需要用filter来去重,直接用数据库实现,还可以自动使用哈希索引,如果不设置UNIQUE就会全表查询;</li>
<li>我们必须要有一个status来标记url是否是新的(new),被爬过(done),或者正在被爬,不然多进程爬虫有可能会同时抽取同一个url来爬取,这是我们不希望的;</li>
<li>depth记录爬虫爬取到第几级</li>
<li>queue_time爬虫添加到队列里的时间</li>
<li>done_time爬取完成的时间</li></ul>
<em>最好全都设成NOT NULL,避免出错</em>

我们整个数据库流程大概可以归结为:
<em><strong>读取——>update状态,给进程内的url上锁——>cursor.commit——>解锁</strong><em>

相关文章

  • 多进程爬虫MySQL表单设计

    先来一个例子: TABLES['urls'] = ("CREATE TABLE urls ("" index ...

  • 一些棘手的问题

    mysql 的引擎和设计方法 debuger 是如何确定越界访问的 如果内存足够,进程和线程是否可以无限的多 端口...

  • 使用多进程抓取网页信息

    使用multiprocessting的多进程爬虫 使用Pool + Queue的多进程爬虫

  • python3关闭子进程的两种方式

    用scrapy做爬虫的时候需要开多个爬虫子进程,为了定时开启和关闭爬虫子进程,需要对子进程做控制,而关闭进程有两种...

  • mysql(三)

    MySQL多实例 什么是实例? 一个进程+多个线程+预分配的内存结构 什么是多实例? 多个进程+多个线程+多个预分...

  • MySQL 多实例

    Linux系统环境 什么是MySQL多实例 简单的说,就是一台服务器运行多个MySQL服务进程,对应的MySQL进...

  • Spring Boot入门(5)表单验证

    介绍   在博客:Spring Boot入门(4)提交表单并存入MySQL数据库中,我们利用提交表单往MySQL中...

  • 关于表单设计的思路

    表单设计的典型流程: 数据建模---------------设计表单------------布局---------...

  • scrapy自定义Pipline

    第一个事mysql 同步Pipline,适用爬虫量小 异步mysql 的pipline, 适用爬虫量大。 自定义...

  • MySQL存储引擎InnoDB学习01-MySQL体系结构和存储

    第一章:MySQL体系结构和存储引擎 Mysql被设计为一个单进程多线程的架构的数据库,MySql数据库实例在系统...

网友评论

    本文标题:多进程爬虫MySQL表单设计

    本文链接:https://www.haomeiwen.com/subject/arafkxtx.html