纠正一下拼写,应该是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也有相应的方案,只是运维上可能要复杂一些。安全性上面各家没有太大的差别。