Heim  >  Fragen und Antworten  >  Hauptteil

python - 对爬虫抓取的数据进行分析该用MySQL还是mogodb?

PHP中文网PHP中文网2741 Tage vor655

Antworte allen(7)Ich werde antworten

  • 高洛峰

    高洛峰2017-04-18 10:03:31

    纠正一下拼写,应该是MongoDB。
    每种数据库都有其自己的优势和不足,适用的场合也不一样。既然我是站在MongoDB这边的,上面也有人提到了MySQL和HDFS,我就分析一下MongoDB比MySQL和HDFS在数据分析上的优势。题主不妨看看这些优势是不是你想要的,再根据自己项目的实际情况做决定。
    MySQL是老牌的RDBMS,具备RDBMS的常见特性,对ACID有完善的支持。其技术经过长时间的沉淀和应用考验,已经在一个比较稳定应用的阶段。RDBMS在实际应用中的对NoSQL的主要优势就是强事务。但一个OLAP的应用上,强事务没有太多用武之地,却阻碍了分布式支持。在充分发展的前提下,最终水平扩展会成为你选择MySQL的主要瓶颈。另外对于爬虫这样的应用,爬取的通常都是非结构化数据,这在关系模型的存储和查询上面都有很大的局限性。但也有一个可能性是你感兴趣的网站都是同样类型的网站,你只对网页上的特定内容有兴趣,这样可以把它们组织成结构化数据,从而在这方面MySQL仍然是可以胜任的。但就算这样,随着应用的发展将来在数据存储的灵活性上仍然会有所牺牲。所以对爬虫这样的应用,MySQL的主要问题是数据模型不够灵活和无法(或者说比较难)水平扩展。
    就上面主要的两个问题而言,HDFS其实都可以胜任。所以HDFS在爬虫这样的应用上面较MySQL是有优势的。同样MongoDB也很好地解决了这两个问题。那么MongoDB对比HDFS的优势在什么地方?很重要的一点来自于MongoDB可以像关系型数据库一样对文档中的任何一个字段建立二级索引,从而在分析过程中可能尽可能大地利用索引带来的性能优势。另外,HDFS提供的更像一个文件系统,而MongoDB提供的则是一个灵活的数据库技术,在MongoDB上可以轻易地实现地理位置分布,过期文档归档等操作。
    从生态系统上,HDFS的周边工具肯定要丰富一些,毕竟发展历史放在那里。而MongoDB目前主要支持的则有:

    • BI Connector:MongoDB对外提供PostgreSQL或MySQL接口以利用已有的BI工具

    • Spark Connector:MongoDB与Spark对接进行计算

    回到你的问题,效率上面平心而论百万到千万级别不算大,无论使用哪个数据库,在正确使用的前提下性能差异不会有质上的区别。可用性问题上MongoDB的高可用可以达到秒级的错误恢复。MySQL也有相应的方案,只是运维上可能要复杂一些。安全性上面各家没有太大的差别。

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-18 10:03:31

    MySQL 在处理大量数据时会变得很捉急,相反 MongoDB 通过集群的话应该会好一些。

    其实你完全可以不用数据库,对于爬虫而言这将有可能成为 IO 的瓶颈。

    你可以尝试使用 Hadoop 的 HDFS。

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:03:31

    你应该会选择Hadoop作为处理平台,这样子的话底层数据存储一般都是用MySQL的.mangodb+hadoop的组合做实时监控比较好,比如春晚直播时候的弹幕,因为mongodb支持毫秒级的数据查询,实时分析。hadoop一次写入多次取用,加上MySQL的话比较适合你这个项目。安全性其实都差不多。关键防火墙做好安全就ok了,毕竟你们的数据库是隔离的。所以我建议可以选择MySQL。

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-18 10:03:31

    我们现在准备写一个爬虫抓取大量数据(预测后期可能会达到两百万到两千万记录的数量级)

    如果只是这点数据, MySQL 或者 MongoDB 都可以. 但是相对来说, MongoDB 会灵活一些.

    Antwort
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:03:31

    200w到2000w的数据量相对来说不是很大,可以考虑这2中自己比较熟悉那个就使用那个。但是基本上数据库达到千万级别都会有查询性能的问题,所以如果数据持续增长的话,可以考虑用mongodb。毕竟mongodb分片集群搭建起来比mysql集群简单多了。而且处理起来更灵活。

    Antwort
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:03:31

    1. 200-2000w的数据量没有必要上hadoop,除非你们团队对hadoop的技术栈很熟悉;

    2. 从性能角度看,这个量级的数据对于MySQL和mongoDB都可以胜任,关键看你的数据是结构化的还是非结构化的,相对而言mongo更灵活点

    Antwort
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:03:31

    刚好现在所在公司做过这方面的东西,并且也是本人负责,可以说出来给题主参考一下。
    我这边主要做的是日志处理和归档,对每天所生成的访问日志进行冷热统计,生成各种数据报表等等,爬虫实际上最终也差不多。
    刚开始考虑过MYSQL,不过MYSQL单表在超过千万级以上性能表现不佳,所以当时还是选择使用mongodb。
    其实做的也很简单,无非是用python定时将每日的服务器日志抓取到本地,然后利用pandas库,将数据构造成自己想要的数据结构,需要计算分组聚合的就聚合,最终把每日的数据结果扔到mongodb中。
    现在公司mongodb数据大概放了有8KW条左右,进行数据检索效率还是可以的,切记记得加索引。
    我们这边除了把数据记录到mongodb之外,还用flask写了个restfulAPI,专门给运营系统调用数据统计结果,运营那边也会在MYSQL上创建一张表,将我mongodb统计出的结果再次统计出一个总数据,放到MYSQL里,这样就不用每次从API那边拿数据调用mongodb中进行重复聚合计算了。

    Antwort
    0
  • StornierenAntwort