Rumah > Soal Jawab > teks badan
我们现在准备写一个爬虫抓取大量数据(预测后期可能会达到两百万到两千万记录的数量级),然后对这些数据进行一些数据分析(主要是各种聚合函数计算,生成统计图,以及排序计算排行榜,还有横向比较生成走势折线图),请问使用mysql作为存储抓取到的数据还是用mogondb存储呢?
我看这两个数据库都有提供一些聚合函数,但是综合从效率,可用性,安全性等方面上来说哪个比较快?
三叔2016-11-21 10:11:08
00w到2000w的数据量相对来说不是很大,可以考虑这2中自己比较熟悉那个就使用那个。但是基本上数据库达到千万级别都会有查询性能的问题,所以如果数据持续增长的话,可以考虑用mongodb。毕竟mongodb分片集群搭建起来比mysql集群简单多了。而且处理起来更灵活。
欧阳克2016-11-21 10:10:59
纠正一下拼写,应该是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也有相应的方案,只是运维上可能要复杂一些。安全性上面各家没有太大的差别。
三叔2016-11-21 10:10:47
你应该会选择Hadoop作为处理平台,这样子的话底层数据存储一般都是用MySQL的.mangodb+hadoop的组合做实时监控比较好,比如春晚直播时候的弹幕,因为mongodb支持毫秒级的数据查询,实时分析。hadoop一次写入多次取用,加上MySQL的话比较适合你这个项目。安全性其实都差不多。关键防火墙做好安全就ok了,毕竟你们的数据库是隔离的。所以我建议可以选择MySQL。
欧阳克2016-11-21 10:10:35
MySQL 在处理大量数据时会变得很捉急,相反 MongoDB 通过集群的话应该会好一些。
其实你完全可以不用数据库,对于爬虫而言这将有可能成为 IO 的瓶颈。
你可以尝试使用 Hadoop 的 HDFS。