更新时间:2021年05月21日18时22分 来源:传智教育 浏览次数:
一般爬虫使用的数据库,是根据项目来定的。如需求方指定了使用什么数据库、如果没指定,那么决定权就在爬虫程序员手里,如果自选的话,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兴趣课程,0基础Python 3天入门课程
·了解Python主流就业方向,把握最新热点技术
·掌握Python的基础语法及API调用
·能够使用Python对数据获取、使用和展示
·打造自己的数据分析项目并自动生成工作报告