Python爬取100G级别,2000K以上数据量,用mysql仍是mongodb?

  这个问题咱们能够从两个角度去解答。一个是100G的数据量用MySQL和MongoDB在存读取上有什么区别,另外一个是数据自己的结构和你要进行的应用来考虑使用哪一种数据库比较方便。mysql

  

   100G的数据量   目前来看100G的数据量其实对MySQL和MongoDB在存放都没有什么压力,若是你要常常读取,那么我建议你的MongoDB来作存储。缘由在于MongoDB是内存映射模式,能够充分利用系统的内存资源,内存越大MongoDB的查询速度越快,毕竟磁盘与内存的I/O效率不是一个量级的。sql

  若是你对查询的速度要求不高,并且爬下来的数据是结构化数据,你又熟悉MySQL的语法及相关操做,彻底能够用MySQL去存这个级别的数据量,就至关于你存储了一个大型Excel表格。mongodb

  

  数据结构数据库

  若是数据结构是不一致的,即不会有些行缺失某些字段,有些行又多出一些字段,那么我建议使用MongoDB作存储处理。由于Mongo没有schema的严格定义,是json格式存取。若是爬虫的字段会常常变化,字段定义可能会变动,Mongo对这方面很宽松,很容易兼容。但若是你对事务有要求,最好仍是选择MySQL。由于MongoDB这种NoSQL数据库并非为了事务关系而设计的,具体应用仍是看需求。json

  

  总而言之,我我的是比较建议使用MongoDB作海量爬虫数据库存储。不管从数据结构的不规整以及数据存读取的速度要求,Mongo均可以胜任,同时MongoDB能够很轻松的横向扩展,分片,复制集群分分钟的事。缓存

  不过最终落地仍是看需求,仍是要从数据存读取频度、量级还有应用场景综合考虑。数据结构

  每一个技术都有本身的应用场景,技术的选择都须要与本身的应用场景结合!工具

  一般来讲,千万条以上的数据,mysql数据库的性能会有明显降低,固然能够经过配置主从,或者使用中间件来提升性能。对于mongoDB来讲,100G,2000W的数据量应该算是正常,管理上会比mysql简单。可是若是须要较强的事务性、一致性等,mongo可能就不能知足要求。性能

  爬虫爬取下来的数据不少能够直接非结构化的存储,对存储的字段还没有有清晰肯定,且由于你的量级很大,不会立马分析,因此建议存储在mongodb 中,以便于进行下一步数据挖掘处理学习

  接下来让小编介绍一下mysq和mongodb的区别

  本人从事Python开发近9年,若是你们在学习Python的学习方法,学习路径,还有之后发展有任何疑问,均可以随时来咨询我,关注我,私信给我“Python”,我会给你系统学习资料以及学习交流的地址(必定要看到最后,地址有,是群)

  

  插入稳定性分析

  插入稳定性是指,随着数据量的增大,每插入必定量数据时的插入速率状况。

  在本次测试中,咱们把这个指标的规模定在10w,即显示的数据是在每插入10w条数据时,在这段时间内每秒钟能插入多少条数据。

  先呈现四张图上来:

  1.MongoDB指定_id插入:

  

  2.MongoDB不指定_id插入:

  

  3.MySQL指定PRIMARY KEY插入:

  

  4.MySQL不指定PRIMARY KEY插入:

  

  分析:

  1.若是MySQL没有通过查询优化的话,其查询速度就不要跟MongoDB比了。MongoDB能够充分利用系统的内存资源,咱们的测试机器内存是64GB的,内存越大MongoDB的查询速度就越快,毕竟。

  2.本次实验的查询的数据也是随机生成的,所以全部待查询的数据都存在MongoDB的内存缓存中的几率是很小的。在查询时,MongoDB须要屡次将内存中的数据与磁盘进行交互以便查找,所以其查询速率取决于其交互的次数。这样就存在这样一种可能性,尽管待查询的数据数目较多,但这段随机生成的数据被MongoDB以较少的次数从磁盘中取出。所以,其查询的平均速度反而更快一些。这样看来,MongoDB的查询速度波动也处在一个合理的范围内。

  3.MySQL的稳定性仍是毋庸置疑的。

  在数据库存放的数据中,有一种特殊的键值叫作主键,它用于唯一地标识表中的某一条记录。也就是说,一个表不能有多个主键,而且主键不能为空值。

  不管是MongoDB仍是MySQL,都存在着主键的定义。

  对于MongoDB来讲,其主键名叫”_id”,在生成数据的时候,若是用户不主动为其分配一个主键的话,MongoDB会自动为其生成一个随机分配的值。

  在MySQL中,主键的指定是在MySQL插入数据时指明PRIMARY KEY来定义的。当没有指定主键的时候,另外一种工具——索引,至关于替代了主键的功能。索引能够为空,也能够有重复,另外有一种不容许重复的索引叫唯一索引。若是既没有指定主键也没有指定索引的话,MySQL会自动为数据建立一个。

  

  总结:

  1.总体上的插入速度仍是和上一回的统计数据相似:MongoDB不指定_id插入> MySQL不指定主键插入> MySQL指定主键插入> MongoDB指定_id插入。

  2.从图中能够看出,在指定主键插入数据的时候,MySQL与MongoDB在不一样数据数量级时,每秒插入的数据每隔一段时间就会有一个波动,在图表中显示成为规律的毛刺现象。而在不指定插入数据时,在大多数状况下插入速率都比较平均,但随着数据库中数据的增多,插入的效率在某一时段有瞬间降低,随即又会变稳定。

  3.总体上来看,MongoDB的速率波动比MySQL的严重,方差变化较大。

  4.MongoDB在指定_id插入时,当插入的数据变多以后,插入效率有明显地降低。在其余三种的插入测试中,从开始到结束,其插入的速率在大多数的时候都固定在一个标准上。

  

  分析:

  1.毛刺现象是由于,当插入的数据太多的时候,MongoDB须要将内存中的数据写进硬盘,MySQL须要从新分表。这些操做每当数据库中的数据达到必定量级后就会自动进行,所以每隔一段时间就会有一个明显的毛刺。

  2.MongoDB毕竟仍是新生事物,其稳定性没有已应用多年的MySQL优秀。

  3.MongoDB在指定_id插入的时候,其性能的降低仍是很厉害的。

  1.在读取的数据规模不大时,MongoDB的查询速度真是一骑绝尘,甩开MySQL好远好远。

  2.在查询的数据量逐渐增多的时候,MySQL的查询速度是稳步降低的,而MongoDB的查询速度却有些起伏。

  +4913.08659,编码:柯西,编码:柯西

相关文章
相关标签/搜索