本文是根據一個Google論壇上的話題的討論,想瞭解一下mongoDB、hadoop、mysql的相關對比,以及如何合理的使用。
問題如下:
這是一個mongodb-user的google group上的討論。LZ是一個廣告公司的技術人員,需要對500M行(5億行)的log資訊進行儲存和資料分析工作,他將這一問題提到group中,並提出了自己的三種想法:
- 將5億行每行50個欄位的資料存在Mysql中-對每一個欄位做索引。
- 同上,不過是將億行資料存在MongoDB中並建索引。
- 將所有行載入到Hadoop中,通過MapReduce進行資料分析。
這是一個常見的問題,我們可以先試著自己思考一下解決方案,然後再來看文章後面各路神仙們的方法吧。
下面是本討論的地址:
http://groups.google.com/group/mongodb-user/browse_thread/thread/632d1648707e51d9/9a504c99168cf4e7?pli=1
建議:
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;
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
6、也有認為不合適的,因為mongoDB的查詢索引之類的可能比不上mysql所以,mongoDB可能只是做了前期的儲存工作,可以沒有!