存储

欢马劈雪     最近更新时间:2020-08-04 05:37:59

306

经过了前面几个小节的操作,现在我们手里已经有了爬虫.可以为我们爬取成堆的数据了,所以到了最后一步,是时候找个地方存放起来了,不然的话,数据就没法分析,数据本身的价值也就没了.而数据库作为当今最主要的数据存储工具,自然我们得了解一下.数据库是一种按照数据结构来组织、存储和管理数据的仓库.可以分成SQL数据库和NOSQL数据库.

关系型数据库,现在热门的有世界上最广泛使用的Mysql还有后起之秀Postgresql以及其他数据库等等.他们具备复杂查询和事务的功能,可以用于复杂数据的存储和需求安全性高的情况.对于爬虫来说,与数据库建立连接靠的是数据库驱动库,比如说golang的mysql-go,javascript的mysqljs,python的python-mysql等等.但关系型数据库因为重心在安全和数据复杂性上,在应对超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题.

这时候,非关系型数据库就应运而生.他们通过非结构化的存储和基于多维关系模型在面对互联网上非结构化信息上有着明显的优势.非关系型数据库一般分为四种.键值(Key-Value)存储数据库(优势是简单易部署,例如redis),列存储数据库(优势是应对分布式存储的海量数据,例如Hbase),文档型数据库(查询效率提升的键值数据库升级版,例如Mongodb)和图形数据库(大多用来存储关联性数据,例如Neo4J).我们可以通过需求合理选择.同样,爬虫与非关系型数据库也是通过数据库驱动所连接的.比如golang的go-mgo,javascript的mongoose,python的mongo-python-driver等等。不过由于追求性能和可扩展性,所以在复杂数据上和安全性上会比关系型数据库要差。

选择好了对应的驱动,我们开始insert数据.你会发现,每次我们insert一次都得向数据库发送一个insert请求.一来二去的很费时间.所以这时候,我们就得用ORM来实现批量插入.ORM是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”.简单来说,就是驱动有的功能ORM都有还更加方便,而ORM的有些功能驱动内却没有提供.ORM框架有很多很多,可以自行查找.

最后来个总结.如果你想要安全,可进行复杂SQL语句查询同时对性能不是很敏感的话。请选择关系型数据库.如果你的数据没有复杂的结构而且需要极高的性能,或者你的数据多是非结构化数据而且不需要复杂语句查询的话,请选择非关系型数据库.那么,你想好存在哪里了么?