本文是根据一个谷歌论坛上的话题的讨论,想了解一下mongoDB、hadoop、mysql的相关对比,以及如何合理的使用。
问题如下:
这是一个mongodb-user的google group上的讨论。LZ是一个广告公司的技术人员,需要对500M行(5亿行)的log信息进行存储和数据分析工作,他将这一问题提到group中,并提出了自己的三种想法:
- 将5亿行每行50个字段的数据存在Mysql中-对每一个字段做索引。
- 同上,不过是将亿行数据存在MongoDB中并建索引。
- 将所有行加载到Hadoop中,通过MapReduce进行数据分析。
这是一个常见的问题,我们可以先试着自己思考一下解决方案,然后再来看帖子后面各路神仙们的方法吧。
下面是本讨论的地址:
建议:
1、mongoDB作为storage layer,hadoop做processing
2、mongoDB不适合经常做插入性更新的数据(需要手工做分片(需要吗现在?)),1.6之后的mongoDB已经支持分片了
3、mongoDB的javascript-based的mapreduce是一个轻量级的线程,可能成为数据处理的bottleneck但是可以自己写一个mapreduce程序
4、hadoop-plugin是什么意思?是mongoDB提供了InputReader, InputSplit, etc? 回答:这帮人真的要写一个hadoop上的jar包....
5、认为hadoop+mongoDB会是个很prefect组合,
查询是这样的:SELECT OS, SUM(IMPS), SUM(CLICKS) FROM TABLE WHERE CC = 'US' AND ISMOBILE = 1 GROUP BY OS;
6、也有认为不合适的,因为mongoDB的查询索引之类的可能比不上mysql所以,mongoDB可能只是做了前期的存储工作,可以没有!storage in mongoDB
use mongo as the input into hadoop, using mongo's index for CC="US" && ISMOBILE=1
use hadoop to do the aggregation
store the result in mongoD