首页技术文章正文

Python爬虫使用哪个数据库好?为什么?

更新时间:2021-05-21 来源:黑马程序员 浏览量:

一般爬虫使用的数据库,是根据项目来定的。如需求方指定了使用什么数据库、如果没指定,那么决定权就在爬虫程序员手里,如果自选的话,mysql 和mongodb 用的都是比较多的。但不同的数据库品种有各自的优缺点,不同的场景任何一种数据库都可以用来存储,但是某种可能会更好。比如如果抓取的数据之间的耦合性很高,关系比较复杂的话,那么mysql可能会是更好的选择。如果抓取的数据是分版块的,并且它们之间没有相似性或关联性不强,那么可能mongodb 会更好。

另外主流的几种永久存储数据库,都是具备处理高并发、具备存储大量数据的能力的,只是由于各自的实现机制不一样,因此优化方案也是不尽相同。总结就是:数据库的选择尽量从项目的数据存在的特性来考虑,还有一个问题就是开发人员最擅长那种数据库。

MongoDB 是使用比较多的数据库,这里以MongoDB 为例,大家需要结合自己真实开发环境选择。

原因:


1)与关系型数据库相比,MongoDB 的优点如下。

①弱一致性(最终一致),更能保证用户的访问速度举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的较精确值。这在某些情况下,例如通过ATM查看账户信息的时候很重要,但对于Wordnik说,数据是不断更新和增长的,这种“较精确”的保证几乎没有任何意义,反而会产生很大的延 迟。他们需要的是一个“大约”的数字以及更快的处理速度。但某些情况下MongoDB 会锁住数据库。如果此时正有数百个请求,则它们会堆积起来,造成许多问题。我们使用了下面的优化方式来避免锁定。每次更新前,我们会先查询记录。查询操作会将对象放入内存,于是更新则会尽可能的迅速。在主/从部署方案中,从节点可以使用“-pretouch”参数运行,这也可以得到相同的效果。使用多个mongod 进程。我们根据访问模式将数据库拆分成多个进程。

②文档结构的存储方式,能够更便捷的获取数据。

对于一个层级式的数据结构来说,如果要将这样的数据使用扁平式的,表状的结构来保存数据,这无论是在查询还是获取数据时都十分困难。

③内置GridFS,支持大容量的存储。

GridFS 是一个出色的分布式文件系统,可以支持海量的数据存储。内置了GridFS 了MongoDB,能够满足对大数据集的快速范围查询。

④内置Sharding。

提供基于Range 的Auto Sharding 机制:一个collection 可按照记录的范围,分成若干个段,切分到不同的Shard 上。Shards 可以和复制结合,配合Replica sets 能够实现Sharding+fail-over,不同的Shard 之间可以负载均衡。查询是对 客户端是透明的。客户端执行查询,统计,MapReduce等操作,这些会被MongoDB 自动路由到后端的数据节点。这让我们关注于自己的业务,适当的时候可以无痛的升级。MongoDB 的Sharding 设计能力较大可支持约20 petabytes,足以支撑一般应用。

这可以保证MongoDB 运行在便宜的PC 服务器集群上。PC 集群扩充起来非常方便并且成本很低,避免了“sharding”操作的复杂性和成本。

⑤第三方支持丰富。(这是与其他的NoSQL 相比,MongoDB 也具有的优势)

现在网络上的很多NoSQL 开源数据库完全属于社区型的,没有官方支持,给使用者带来了很大的风险。而开源文档数据库MongoDB 背后有商业公司10gen 为其提供供商业培训和支持。

而且MongoDB 社区非常活跃,很多开发框架都迅速提供了对MongDB 的支持。不少知名大公司和网站也在生产环境中使用MongoDB,越来越多的创新型企业转而使用MongoDB 作为和Django,RoR 来搭配的技术方案。

⑥性能优越

在使用场合下,千万级别的文档对象,近10G 的数据,对有索引的ID的查询不会比mysql慢,而对非索引字段的查询,则是全面胜出。mysql实际无法胜任大数据量下任意字段的查询,而mongodb的查询性能实在让我惊讶。写入性能同样很令人满意,同样写入百万级别的数据,mongodb 比我以前试用过的couchdb要快得多,基本10分钟以下可以解决。补上一句,观察过程中mongodb 都远算不上是CPU杀手。


2)Mongodb与redis相比较

①mongodb 文件存储是BSON 格式类似JSON,或自定义的二进制格式。

mongodb 与redis 性能都很依赖内存的大小,mongodb 有丰富的数据表达、索引;最类似于关系数据库,支持丰富的查询语言,redis数据丰富,较少的IO,这方面mongodb优势明显。

②mongodb 不支持事物,靠客户端自身保证,redis 支持事物,比较弱,仅能保证事物中的操作按顺序执行,这方面 redis 优于mongodb。

③mongodb 对海量数据的访问效率提升,redis 较小数据量的性能及运算,这方面 mongodb性能优于redis .monbgodb 有mapredurce 功能,提供数据分析,redis没有,这方面 mongodb优于redis。




以下是黑马程序员近期推出的Python兴趣课程,3天入门Python,体验Python的魅力!

0基础Python3天入门课程

   ·了解Python主流就业方向,把握最新热点技术
   ·掌握Python的基础语法及API调用
   ·能够使用Python对数据获取、使用和展示
   ·打造自己的数据分析项目并自动生成工作报告

Python零基础3天课程


分享到:
在线咨询 我要报名
和我们在线交谈!