2014年1月28日火曜日

Map/Reduceの超初心者用説明【MongoDB】

MapReduceで10万件以上のアクセスログをどうこうする話 その1


最近MongoDBを触らせてもらっていて、sharding構成組んでログをとって
アクセスログのクエリを投げて

「ぐへへ、こんなにbotちゃんが来てくれているんですねw S・E・Oで使いましょう!!さぁさぁ!!」

と前職の会社でわいわい言ってます。

でもね、shardingしたサーバにmongosのプロセス立ち上げて、
そこに作ったコレクションに20万レコードくらいを入れてAggregation系のクエリとか
投げてみるとまぁ落ちる。

クエリが重い!!


そうなんです、何も考えずにmongoQueryとか書くだけじゃダメなんです。
数万件くらいなら非分散処理で十分、数十秒とか数分の世界なんですが、
十万オーダーそれ以上のデータに対しては集計クエリ投げると10分とか
待たされたりしたり、途中でやめるとExceptionを吐いてしまいShardingされたプロセスが落ちます。もしくはmongosのプロセスが落ちます。

普段スマホエンジニアの僕にはこの対策がわからず・・・
せっかくシコシコ集めたアクセスログとかエラーログとかが無駄に・・・

Map/Reduceがあるやんけ


大規模データに分散処理をかけて集計したい。
そんなニーズを満たしてくれる夢のようなNoSQLが世の中にはある。

そう、MongoDBだ。

標準のメソッドとしてある、Aggregationフレームワークも良いけど、こっちも注目しないとね!!でもまったく知らない。

なに?「地図/減る」ってなに?ひょっとしてデュース・ビガロウの間違いじゃない?(超くだらないおバカ映画ですわ、下ネタしか出てこない)

なんかリファレンスにあったけど、ただのかっこいい横文字程度にしか思ってなかった。


でもまず名前からあして謎。
なんで調べて行きましょう〜





Map/Reduce


なんなの?

大量のデータを分散処理
フレームワークやアルゴリズム、またはシステムを指す。

なんでMap/Reduce?

それぞれが異なる処理名を指す。
・    map処理:分割されたデータの断片に何らかの加工を施し、必要な情報を抽出する。
・reduce処理:mapで抽出した情報を束ねて、データ全体についての整理された処理結果を得る。

それぞれを別で定義して、マシンに分散してこれらの処理をさせることからこの名称。

というわけで「Map/Reduceはmap処理とreduce処理で分散して大量のデータを集計する処理の事」ってことで次回に続く。


http://chikura.fprog.com/?UID=1238816076
http://www.virtual-tech.net/blog/2008/10/mapreduce.html

0 件のコメント:

コメントを投稿

ShareThis