76
MongoDB で作る ソーシャルデータ新解析基盤 ~いまとむかし~ doryokujin NoSQLセミナー:ソーシャルメディア、ソーシャルアプリが育てたNoSQL技術

MongoDBで作るソーシャルデータ新解析基盤

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: MongoDBで作るソーシャルデータ新解析基盤

MongoDB で作るソーシャルデータ新解析基盤

~いまとむかし~doryokujin

NoSQLセミナー:ソーシャルメディア、ソーシャルアプリが育てたNoSQL技術

Page 2: MongoDBで作るソーシャルデータ新解析基盤

[名前] doryokujin ( 井上 敬浩 )

[年齢] 26歳

[専攻] 数学(統計・確率的アルゴリズム)

[会社] 芸者東京エンターテインメント

[職業] データマイニングエンジニア

[趣味] マラソン ( 42.195km: 2時間33分 )

[コミュニティ]

・MongoDB JP: もっとMongoDBを日本に!

・TokyoWebMining: 統計解析・データマイニングの各種方法論、WEB上のデータ活用に関する勉強会

・おしゃれStatistics: 名著「statistics」を読み進めながら統計を学ぶ勉強会

自己紹介

Page 3: MongoDBで作るソーシャルデータ新解析基盤

[2010年11月] MongoDB ユーザーグループ発足

・MongoDB JP - Google グループ

[2010年12月] 「第1回 MongoDB 勉強会」を開催

・「第1回 MongoDB JP & CouchDB JP 合同勉強会 in Tokyo」活動報告

[2011年03月] 「MongoDB Conference in Japan」を開催

・「MongoDB Conference in Japan」レポート

[2011年04月] 「第2回 MongoDB 勉強会」を開催

・「第2回 MongoDB JP 勉強会 in Tokyo」レポート

[2011年05月] 「第3回 MongoDB 勉強会」を開催※ MongoDB 勉強会はフューチャーアーキテクトさんにて毎月開催しています!

MongoDB JP (#mongotokyo)

Page 4: MongoDBで作るソーシャルデータ新解析基盤

・ログ(アクセスログ・行動ログ等)解析基盤の話を2つ:

「MongoDB と Hadoop を活用したデータ解析基盤」

- 2010年11月 ~ 2011年4月までの仕様

「MongoDB と Redis・Scribe を活用したデータ解析基盤」

- 2011年5月からの新仕様(現在開発継続中)

- 新基盤の詳細なアーキテクチャは「第4回MongoDB勉強会(6月中旬)」で発表予定

今日の発表内容

Page 6: MongoDBで作るソーシャルデータ新解析基盤

1. 旧解析基盤について

1.1 処理フローについて

1.2 解析結果の例

2. 新解析基盤について

2.1 処理フローについて

2.2 MongoDB 機能紹介

2.3 新解析基盤の紹介

アジェンダ

Page 7: MongoDBで作るソーシャルデータ新解析基盤

1. 旧解析基盤について「MongoDB と Hadoop を活用したデータ解析基盤」

http://www.slideshare.net/doryokujin/mongodb-uimongodb

Page 8: MongoDBで作るソーシャルデータ新解析基盤

1.1 処理フロー

Page 9: MongoDBで作るソーシャルデータ新解析基盤

[企画・経営者に対して]・彼らの意志決定の助けとなるようなデータを提供

- 基本的なPV、UU、DAO、ARPUなどは当たり前

- イベントの効果・特定の行動に対する詳細な情報をユーザー単位で見れるように

※ 基本的にあらゆるデータを提供。出ていないデータはログとして出力してもらうために、形式と出し方を提示してエンジニアに仕込んでもらう

解析者のおしごと1

Page 10: MongoDBで作るソーシャルデータ新解析基盤

1. 分散するサーバーから各種ログをローカルに収集2. 課金・登録情報MySQLから該当データを取得3. ユーザーゲームセーブデータをCassandraから取得

旧解析基盤の処理フロー

1.Data Gathering

3.Data Analysis

5.Data Mining

6.Data Sharing

2.Data Pre-processing

4.Reslt Data Strage

1. ログの整形2. フィルタリング

1. ユーザーIDをキーにした各指標値の集計2. アクセスログの集計3. 一定期間のイベントの効果測定のための集計

Page 11: MongoDBで作るソーシャルデータ新解析基盤

ランキング課金情報登録日

行動ログアクセスログ

ゲームセーブデータ

2. Data Pre-processing3. Data Analysis 4. ResultData

Storage

Python ScriptThrift & Python

データセンター → AmazonS3

1. Data Gathering

Cassandra MySQL

HDFS

1. Data Gathering

5. Data Sharing6. Data Mining

旧解析基盤の処理フロー

exec/day

Page 12: MongoDBで作るソーシャルデータ新解析基盤

Sleepy.Mongoose

解析対象データ

ソーシャルデータ

Graph Analysis

Web UI

Data Analysis

5. Data Sharing

6. Data Mining

旧解析基盤の処理フロー

ScientificPython

Page 13: MongoDBで作るソーシャルデータ新解析基盤

1.2 解析結果の例

Page 14: MongoDBで作るソーシャルデータ新解析基盤

User 課金データ// 11/10に最も課金してくれたユーザーTOP10> db.user_charge.find({date:"2010-11-10"}) .sort({totalCharge:-1}).limit(10).forEach(printjson){ "_id" : "2010-11-10+7777+Charge", "date" : "2010-11-10", "lastUpdate" : "2010-11-10", "totalCharge" : 10000, "userId" : ”7777", "actionType" : "Charge", "boughtItem" : { "アクセサリーの素EX" : 13,

"コネルギー+6000" : 3,

"アクセサリーの素PRO" : 20

}}{…

Page 15: MongoDBで作るソーシャルデータ新解析基盤

> db.daily_charge.find({date:"2010-11-10",T:"all"}) .limit(10).forEach(printjson) { "_id" : "2010-11-10+group+Charge+all+all", "date" : "2010-11-10", "total" : 100000, "UU" : 2000, "group" : {   "わくわくポイント" : 1000000,

  "アクセサリー" : 1000000, ... }, "boughtItemNum" : { "料理の素EX" : 8, "アクセサリーの素" : 730, ... }, "boughtItem" : { "料理の素EX" : 10000, "アクセサリーの素" : 100000, ...

Daily 課金データ

Page 16: MongoDBで作るソーシャルデータ新解析基盤

User 行動データ> db.user_trace.find({date:"2010-11-10”,actionType:

"a{Make}",userId:”7777"}).limit(10).forEach(printjson)

{ "_id" : "2010-11-10+7777+a{Make}",   "date" : "2010-11-10"

"lastUpdate" : "2010-11-11", "userId" : ”7777", "actionType" : "a{Make}", "actionDetail" : {     "make item ksutera" : 3,

"make item makaron" : 1, "make item huwahuwamimiate" : 1, "make item ringoame" : 3,     …

   }

}

Page 17: MongoDBで作るソーシャルデータ新解析基盤

Daily 行動データ> db.daily_trace.find( {date:{$gte:"2010-11-10”,$lte:”2010-11-20”},actionType:"a{Make}"}

).limit(10).forEach(printjson)

{

"_id" : "2010-11-10+group+a{Make}",

"date" : "2010-11-10", "lastUpdate" : "2010-11-12",

"actionType" : "a{Make}",

"actionDetail" : {

    "make item kinnokarakuridokei" : 615,

"make item banjo-" : 377, "make item itigoke-ki" : 135904,

"make item wadaikoan" : 40,

     "make item ha-pu" : 11,

     ...

},...}

Page 18: MongoDBで作るソーシャルデータ新解析基盤

ユーザー属性データ> db.user_registration.find({userId:”7777"}).forEach(printjson){ "_id" : "2010-06-29+7777+Registration", "userId" : “7777" "actionType" : "Registration", "category" : { R1” : “True”, #直近1週間ログインしていない場合 = True “T” : “ll” #プレイ期間が長期のユーザー

     …   }, “tag”:[“longTerm”,”highFreq”], #ブログのタグのようなもの   “firstCharge” : “2010-07-07”, #初課金日   “lastLogin” : “2010-09-30”, #最終ログイン日

   “playTerm” : 94, #プレイ期間   “totalCumlativeCharge” : 50000, #総合課金額   “totalMonthCharge” : 10000, #直近1ヶ月の課金額   …}

Page 19: MongoDBで作るソーシャルデータ新解析基盤

属性カテゴリデータ> var cross = new Cross() //ユーザー定義関数

//月額課金×プレイ期間(退会ユーザー)

> MCResign = cross.calc(“2010-10-08”,“MC”,1)

課金/期間 0円(z) ~1000円(s) ~10000円(m) 10000円~(l) 合計

~1日(z) 50000 10 5 0 50015

~1週間(s) 50000 100 50 3 50153

~1ヶ月(m) 100000 200 100 1 100301

~3ヶ月(l) 100000 300 50 6 100356

3ヶ月~(ll) 0 0 0 0 0

//月額課金×プレイ期間(現役ユーザー)

> MCNotResign = cross.calc("2010-10-08","MC",-1)課金/期間 0円(z) ~1000円(s) ~10000円(m) 10000円~(l) 合計

~1日(z) 50000 10 5 0 50015

Page 20: MongoDBで作るソーシャルデータ新解析基盤

[例] チュートリアルページの離脱状況を確認:

アクセスデータ

//ユーザー定義関数

> access = getAccessData(“tutorial”,“2010-12-01”)

UU PATH

10000 /playshop2-gree/tutorial/FirstTopPage

9500 /playshop2-gree/tutorial/Tutorial01Page

8000 /playshop2-gree/tutorial/Tutorial02Page

7700 /playshop2-gree/tutorial/Tutorial03Page

7000 /playshop2-gree/tutorial/Tutorial04Page

4000 /playshop2-gree/tutorial/make/avatar

3800 /playshop2-gree/tutorial/Tutorial05Page

Page 21: MongoDBで作るソーシャルデータ新解析基盤

[まとめ]・MongoDBは解析結果データ格納サーバーのみ

・集計自身は Hadoop が担当

・大容量のログを Hadoop で Reduction してMongoDBに格納

旧解析基盤

Page 22: MongoDBで作るソーシャルデータ新解析基盤

[特徴]→ MongoDB が解析対象データ(ログ)サーバーにも

→ 集計自身に MongoDB が参加

→ 大容量のログを MongoDB に格納、その切り出しを Input として Hadoop などで処理、そして Mongo へ

新解析基盤では…

Page 23: MongoDBで作るソーシャルデータ新解析基盤

2. 新解析基盤について「MongoDB と Redis・Scribe を活用したデータ解析基盤」

Page 24: MongoDBで作るソーシャルデータ新解析基盤

2.1 処理フロー

Page 25: MongoDBで作るソーシャルデータ新解析基盤

[エンジニアに対して]・問題が起こった場合、該当する時間のログを提供して早期問題解決に役立てる

・不正値や異常値を発見して不正ユーザーの対策や早期バグの発見に役立てる

[サポートに対して]・ユーザーの問い合わせ・クレームに対して根拠をもって返答し、納得してもらえるように、対象ユーザーの行動を全てトラッキングできるようにする

解析者のおしごと2

Page 26: MongoDBで作るソーシャルデータ新解析基盤

・ログの表示機能:

指定された期間のログを提供する機能

・ログの検索機能:

ユーザーIDや行動タイプ、期間の条件でログを切出す機能

・バッチ集計機能:

ユーザーID・日・時間ごとにあらゆる指標を計算する機能

・非バッチ集計機能:

急な要請にも即座に該当データの提示や集計ができる機能

解析基盤に求められるもの

Page 27: MongoDBで作るソーシャルデータ新解析基盤

[Data Storage]:前者2つはデータを”Storage”する機能

・ファイルシステム

・[RDBMS] ORACLE・MySQL

・[NoSQL] HBASE・MongoDB・etc...

[Data Processing]:後者2つはデータを”Processing”する機能

・[Hadoop Family] Hadoop・Pig・Hive・Mahout

・[Other] disco・Piccolo・Apache Hama

・[NoSQL] MongoDB・Redis・Riak・etc...

検討すべきツール

Page 28: MongoDBで作るソーシャルデータ新解析基盤

[重要なこと]

・いかに少ないコスト・リソースで実現するか

・いかに楽に・安定的に運用していくか

・いかにある程度のリアルタイム性を持たせるか

・1人で構築・管理していく上で最適なものを

[結論]:MongoDB + Redis + Scribe (後 Hadoop)

解析基盤に求められるもの

Page 29: MongoDBで作るソーシャルデータ新解析基盤

新解析基盤の処理フロー1.Data Gathering

4.Data Analysis6.Data Mining

7.Data Sharing

2.Data Pre-processing

5.ResltData Strage

3. Raw Data Strage

Raw Data Search

User Tracking

Page 30: MongoDBで作るソーシャルデータ新解析基盤

4. ResultData Storage

ランキング課金情報登録日

ゲームセーブデータ

Python ScriptThrift & Python

Cassandra MySQL

1. Data Gathering

5. Data Sharing6. Data Mining

新解析基盤の処理フロー

行動ログアクセスログ

1. Data Gathering2. Data Pre-processing

データセンター

insert/hour

3. Data AnalysisWith

Page 31: MongoDBで作るソーシャルデータ新解析基盤

2.2. Mongo DB 機能紹介~Replication・Sharding・MapReduce~

Page 32: MongoDBで作るソーシャルデータ新解析基盤

[開発元] 10gen http://www.10gen.com/

[実装] C++

[OS] Linux, Mac, Windows, Solaris

[由来] “Humongous”(ばかでかい)amounts of data

[ライセンス]

・Database: GNU AGPL v3.0 License

・Drivers: Apache License v2.0

イントロダクション

Page 33: MongoDBで作るソーシャルデータ新解析基盤

Production Deployments

Page 34: MongoDBで作るソーシャルデータ新解析基盤

[ドキュメント指向DB] JSON(内部ではBSONで保持)

[完全なインデックスサポート] あらゆる属性でインデックス作成

[Replication] 自動フェイルオーバー・高可用性

[Sharding] 自動シャーディング

[Map/Reduce] フレキシブルな記述が可能

[クエリ] あらゆる条件で条件指定可能

[高速 In-Place Update] 高速なAtomic Modifiers

[GridFS] 巨大なファイルも保存可能http://www.mongodb.org/

MongoDB の特徴

Page 35: MongoDBで作るソーシャルデータ新解析基盤

2.2(a) Replica Sets

Page 36: MongoDBで作るソーシャルデータ新解析基盤

2.2(a) Replica Sets

Member1Primary

Member2Secondary

Member4Secondary

Sync

SyncSync

Member3Secondary

Page 37: MongoDBで作るソーシャルデータ新解析基盤

[特徴]

・1 Primary + N Secondary

・自動フェイルオーバー機能

・自動リカバリー機能

・Set メンバーの追加・削除が容易

・Primary - Secondary 間は非同期通信

・Write は Primary のみ・Read は Secondary からも ( “Read Scaling” )

2.2(a) Replica Sets

Page 38: MongoDBで作るソーシャルデータ新解析基盤

[自動フェイルオーバー]

2.2(a) Replica Sets

Member1Primary

Member2Secondary

Member4Secondary

Sync

SyncSync

Member3Secondary

1. Current Primary

Page 39: MongoDBで作るソーシャルデータ新解析基盤

[自動フェイルオーバー]

2.2(a) Replica Sets

Member1Primary

Member2Secondary

Member4Secondary

Member3Secondary

2. Primary Down

Page 40: MongoDBで作るソーシャルデータ新解析基盤

[自動フェイルオーバー]

2.2(a) Replica Sets

Member1Primary

Member2Secondary

Member4Secondary

Member3Secondary

3. Election Time

Negotiate Negotiate

Negotiate

Page 41: MongoDBで作るソーシャルデータ新解析基盤

[自動フェイルオーバー]

2.2(a) Replica Sets

Member2Primary

Member4Secondary

Member3Secondary

4. New Primary

SyncSync

primary 選出基準1. priority 値が最大2. primary との最終同期が最新3. votes 値が高い

Page 42: MongoDBで作るソーシャルデータ新解析基盤

[自動リカバリー]

2.2(a) Replica Sets

Member2Primary

Member4Secondary

Member3Secondary

Sync Sync

Member1Secondary

CatchUp & Sync

Page 43: MongoDBで作るソーシャルデータ新解析基盤

2.2(b) Sharding

Page 44: MongoDBで作るソーシャルデータ新解析基盤

2.2(b) Sharding

mongod 1

DatabaseA DatabaseB

CollectionA Coll CollDoc Doc DocDoc Doc DocDoc Doc DocDoc Doc Doc

Doc Doc DocDoc Doc Doc

Doc Doc DocDoc Doc Doc

DocDocDocDoc

Doc

Doc Doc DocDoc Doc Doc

EnableSharding

DatabaseACollectionADoc Doc DocDoc Doc DocDoc Doc Doc

mongod 2

DatabaseACollectionADoc Doc DocDoc Doc DocDoc Doc Doc

mongod 3

mongod 1

DatabaseA DatabaseB

CollectionA Coll CollDoc Doc DocDoc Doc Doc

DocDocDocDoc

Doc

分割

[Sharding とは]

Shard1

Shard2 Shard3

Page 45: MongoDBで作るソーシャルデータ新解析基盤

[特徴]

・クライアントの接続を mongos サーバーが仲介することによってクラスタ全体の情報を意識せず扱える

・クライアントは Sharding していない状況と同じようにクエリを発行し、結果を得ることができる

・Shardの 追加・撤退が容易にできる

・自動 Sharding 機能 が指定した Shard Key でデータ振り分けルールを自動決定・随時更新

・自動 Balancing 機能 が Chunk の移動を行い、Shard 間でデータの均質性を保つ

2.2(b) Sharding

Page 46: MongoDBで作るソーシャルデータ新解析基盤

2.2(b) Sharding

DatabaseACollectionADoc Doc DocDoc Doc DocDoc Doc Doc

mongod 2

DatabaseACollectionADoc Doc DocDoc Doc DocDoc Doc Doc

mongod 3mongod 1

DatabaseA DatabaseB

CollectionA Coll CollDoc Doc DocDoc Doc Doc

DocDocDocDoc

Doc

mongosconfigshard 情報

ClientClient Client

データの自動振り分け

[自動 Sharding]

Shard1 Shard2 Shard3

DocDoc

Page 47: MongoDBで作るソーシャルデータ新解析基盤

DatabaseACollectionADoc Doc DocDoc Doc DocDoc Doc Doc

mongod 2

DatabaseACollectionADoc Doc DocDoc Doc DocDoc Doc Doc

mongod 3mongod 1

DatabaseA DatabaseB

CollectionA Coll CollDoc Doc DocDoc Doc Doc

DocDocDocDoc

Doc

mongosconfigshard 情報

ClientClient Client

Doc Doc DocDoc Doc DocDoc Doc DocDoc Doc Doc

shardの偏り!

[自動 Balancing 1]

2.2(b) ShardingShard1 Shard2 Shard3

Page 48: MongoDBで作るソーシャルデータ新解析基盤

DatabaseACollectionADoc Doc DocDoc Doc DocDoc Doc Doc

mongod 2

DatabaseACollectionADoc Doc DocDoc Doc DocDoc Doc Doc

mongod 3mongod 1

DatabaseA DatabaseB

CollectionA Coll CollDoc Doc DocDoc Doc Doc

DocDocDocDoc

Doc

mongosconfigshard 情報

ClientClient Client

Doc Doc DocDoc Doc Doc Doc Doc Doc Doc Doc Doc

マイグレーション※マイグレーションは Chunk 単位

2.2(b) ShardingShard1 Shard2 Shard3

[自動 Balancing 2]

Page 49: MongoDBで作るソーシャルデータ新解析基盤

[注意点]

※ Sharding 環境では様々な問題が起こる

・Unique なキーが重複してしまう

・常に振り分けルールを更新するため、パフォーマンスが低下

・single update operation でエラー

・マイグレーション中は Count() コマンドに誤差

・マイグレーションには多大なメモリ消費とサーバー負荷が

・メモリが不足しているとマイグレーションは起こらない

2.2(b) Shardinghttp://www.slideshare.net/doryokujin/mongo-sharding

Page 50: MongoDBで作るソーシャルデータ新解析基盤

2.2(c) Mongo Map Reduce

Page 51: MongoDBで作るソーシャルデータ新解析基盤

2.2(c) Mongo Map Reduce“Primary”に指定した Shard

ResultCollection

3. Reduce

out option1. replace2. merge3. reduce4. memory

4. Result

[Mongo Map Reduce Model]

mongos ※shuffle 機能は無い1.ルーティング・指示

Shard1

2. Map Reduce

Shard2

2. Map Reduce

Shard3

2. Map Reduce

Shard4

2. Map Reduce

Shard5

2. Map Reduce

Shard6 2. Map Reduce

Shard13. Reduce

Page 52: MongoDBで作るソーシャルデータ新解析基盤

[特徴]

・Java Script で記述

・Map Reduce の出力先に4つの選択肢がある:

replace: 新しくコレクションを作り結果を格納。既に同名コレクションが存在するならコレクション全体を上書

merge: 既存のコレクションに同名のキーがあるフィールドの値を書き換える

reduce: 既存のコレクションに同名のキーがあるフィールドに対して新値と元の値に対して reduce 関数を適用

inline: コレクションを作成せず、メモリ上で計算して結果を返す(16MBまで)

2.2(c) Mongo Map Reduce

Page 53: MongoDBで作るソーシャルデータ新解析基盤

[注意点]

・map reduce処理は mongod あたり1スレッドしか使用できない

・16MB 以上の出力はコレクションへの書き込みが発生

・実行中も DB はロックしないが他のオペレーションが遅くなる

・仕組みとルールを理解していないと所望の結果が得られない

・JavaScript で記述しないといけない

2.2(c) Mongo Map Reduce

Page 54: MongoDBで作るソーシャルデータ新解析基盤

2.2(d) まとめと課題

Page 55: MongoDBで作るソーシャルデータ新解析基盤

・Sharding は以下の理由で信頼できない

- Migration 時におこる様々な問題

- Update や Unique Index 周りも問題

- データ分割ルールが複雑になりすぎて把握できない

・Map Reduce はそれほど以下の理由で強力ではない

- Shard あたり1コアしか使い切ることができない

- 16MB以上の計算結果はコレクションに書き出す

- Secondary の Collection を活用することができない

2.2(d) まとめと課題

これらの課題をいかに克服するか

Page 56: MongoDBで作るソーシャルデータ新解析基盤

2.3 新解析基盤の紹介

Page 57: MongoDBで作るソーシャルデータ新解析基盤

[技術要素]・MongoDB v1.8.1

・Redis v2.2.6

・scribe

・Hadoop

[構成サーバー]・MongoDB Data サーバー × 6:Raw Data Storage

・MongoDB Result サーバー × 2 : 解析済データサーバー

・BackUp サーバー × (3 - 6):古くなったデータのJSON Dumper

・Monitoring サーバー × 1:Mongoの監視・サーバー情報管理

技術要素・構成サーバー

Page 58: MongoDBで作るソーシャルデータ新解析基盤

2.3(a) Mongo: Raw Data Storage

Page 59: MongoDBで作るソーシャルデータ新解析基盤

[25 shard 構成]

・25 shard × 3 Replica Sets + 3 config + 6 mongos

・Shard key = “hour”

・shard0 - shard23 に各時間 (0,1,...,23) を1つずつ割り当てるマニュアル Sharding、Chunk の分割も起こさない

・よって自動 Sharding は使わない

・自動 Balancer の停止:Migration は起こさない

Mongo: Raw Data Storage

Manual Sharding Model

Sharding の種々の問題を防ぐ

[08/May/2011:04:35:11 +0900]

Page 60: MongoDBで作るソーシャルデータ新解析基盤

[4Shard / Server]

・サーバー1台 (4core) に4shard=(4mongod)を同居

[Output Only Shard]

・25 番目の shard は解析結果コレクションの書き出し用

・ログデータは保持しない

・SSDによる高速出力

[Replication]

・他サーバーに Replica Set Member を配置

全コアを使いきる

高速書き出し

Mongo: Raw Data Storage

Page 61: MongoDBで作るソーシャルデータ新解析基盤

Shard00

Shard01

Shard02

Shard03

Shard04

Shard05

Shard06

Shard07

Disk1

Disk2

Shard04

Shard05

Shard06

Shard07

Disk1

Disk2

Shard20

Shard21

Shard22

Shard23

Shard16

Shard17

Shard18

Shard19

Disk1

Disk2

mongos

...

Shard24 SSD

mongos ... mongos

Primary

Secondary

server1 server2server6

Mongo: Raw Data Storage

Shard00

Shard01

Shard02

Shard03

Page 62: MongoDBで作るソーシャルデータ新解析基盤

Shard00

Shard01

Shard02

Shard03

Shard04

Shard05

Shard06

Shard07

Disk1

Disk2

Shard04

Shard05

Shard06

Shard07

Disk1

Disk2

Shard20

Shard21

Shard22

Shard23

Shard16

Shard17

Shard18

Shard19

Disk1

Disk2

...

Shard24 SSD

mongos

Raw Data Search

Primary

Secondary

db.collection.find( {date:20110517, userId:”1234”});

mongosが該当するshardからデータ取得

Client

Shard00

Shard01

Shard02

Shard03

Page 63: MongoDBで作るソーシャルデータ新解析基盤

Shard00

Shard01

Shard02

Shard03

Shard04

Shard05

Shard06

Shard07

Disk1

Disk2

Shard04

Shard05

Shard06

Shard07

Disk1

Disk2

Shard20

Shard21

Shard22

Shard23

Shard16

Shard17

Shard18

Shard19

Disk1

Disk2

...

Shard24 SSD

mongos

Insert per Hour

Primary

Secondary

db.collection.insert( {hour:0, userId:”1234”, actionType:”login”,});

Client

db.collection.insert( {hour:21, userId:”9876”, actionType:”put item”,...});

mongosが該当するshardへデータ挿入

Shard00

Shard01

Shard02

Shard03

Page 64: MongoDBで作るソーシャルデータ新解析基盤

...

mongos

挿入頻度と scribe

データは1時間毎にscribeから取得し保存先のhostのmongosにbulk insert

0 - 3時までのログ 20 - 23時までのログ

行動ログアクセスログ

データセンター

insert/hour

mongos

Page 65: MongoDBで作るソーシャルデータ新解析基盤

2.3(b) Mongo: Data Analysis

Page 66: MongoDBで作るソーシャルデータ新解析基盤

Shard00

Shard01

Shard02

Shard03

Shard20

Shard21

Shard22

Shard23

SSD

Mongo Master MR (for small data)

Shard00

Shard01

Shard02

Shard03

24shard(=24core) フル活用してMapReduce SSD上のcollection

に高速書き込みmongos

2.MR 2.MR 2.MR2.MR 2.MR

3.Reduce

1.ルーティング・指示

...

ResultCollection

Shard24

4. Result

out:reduce

Result情報には各Shardの統計情報=時間別統計情報

Page 67: MongoDBで作るソーシャルデータ新解析基盤

[雑感]

・デフォルトの Mongo Map Reduce は Master しか使えない

・Map Reduce 実行中でもDBはロックしない

・ただしパフォーマンスは落ちる

・長時間の Map Reduce を Master に対して行いたくない

・書き込みの起きていない Master と全ての Slave で Map Reduce したい

Mongo Master MR (for small data)

Page 68: MongoDBで作るソーシャルデータ新解析基盤

※現在insertが行われている時間帯のShard は

避ける

[Slave In-Memory Map Reduce Model]

Shard04

Shard05

Shard06

Shard07

Shard00

Shard01

Shard02

Shard03

Shard16

Shard17

Shard18

Shard19

Shard24 SSD

In-Memory MRIn-Memory MRIn-Memory MR

Shard20

Shard21

Shard22

Shard23

In-Memory MR

Shard04

Shard05

Shard06

Shard07

In-Memory MR

Shard00

Shard01

Shard02

Shard03

In-Memory MR

Mongo Slave MR (for middle data)

...

Primary

Secondary

Page 69: MongoDBで作るソーシャルデータ新解析基盤

Mongo Redis Model (for middle data)

1. 全 Shard 全 Primary / Secondary(insert 中の Shard除く) の mongod に直接接続(並列処理)

Primary

Secondary

3. 各 mongod の実行結果(key,value)を同host内のRedisに集約 HINCRBY or INCR or SADD ...3.Reduce

2. mapreduce / distinct / find などを実行。find の場合は別途集計処理

local redis

Page 70: MongoDBで作るソーシャルデータ新解析基盤

Mongo Redis Model (for middle data)

...

global redis

local redis local redis local redis

ResultCollection

② ②

③③③

④④④

Page 72: MongoDBで作るソーシャルデータ新解析基盤

Mongo R Graph Model(for small data)Shard04

Shard05

Shard06

Shard07

Shard00

Shard01

Shard02

Shard03

RMongo

RMongoGraphなどの複雑なオブジェクト

Res.MongoDB

RMongo

RMongo

CappedCollection

ResultCollection

Graph・Network Analysis

Page 73: MongoDBで作るソーシャルデータ新解析基盤

Mongo MR on Disk (for big data)Shard04

Shard05

Shard06

Shard07

Shard00

Shard01

Shard02

Shard03

text

text

text

text

text

text

text

text

key1

key2

key3

key4

find

find

Page 74: MongoDBで作るソーシャルデータ新解析基盤

Mongo Hadoop Model (for big data)Shard04

Shard05

Shard06

Shard07

Shard00

Shard01

Shard02

Shard03

text

text

text

text

text

text

text

text

find

find

HDFSor

FileSytem

Page 75: MongoDBで作るソーシャルデータ新解析基盤

[まとめ]

・現バージョン (v1.8) においても Sharding と Map Reduce はプロダクションレベルでは無い

・Mongo DB は多機能だけれども高性能ではない

・まだたくさんの不都合が起こっている

・ただし解析でログを扱う場合にはそれらの機能に一部の制限をつけて加える事で強力な手段となる

・ある程度のリアルタイム性も確保することが可能

・Mongo DB は素晴らしい解析基盤を提供してくれる!!

最後に

Page 76: MongoDBで作るソーシャルデータ新解析基盤

ありがとうございました