Analytics with MongoDB
Transcript of Analytics with MongoDB
![Page 1: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/1.jpg)
Analytics with MongoDB
@bibrost
![Page 2: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/2.jpg)
Page : 1
@bibrost
Freelance Engineer
MongoDB JP / GraphDB JP
Made Analytics system for SocialApps
Joined SV startup from September 2011
- Python(Tornado) / Scala( Lift )
![Page 3: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/3.jpg)
Page : 2
Today‘s Theme
1.What’s Analytics?
2.Why MongoDB?
3.Case study
![Page 4: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/4.jpg)
Page : 3
What’s Analytics?
![Page 5: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/5.jpg)
Page : 4
データを分析し「行動」を変え結果を向上させる継続的活動
Data
Analytics
Action
![Page 6: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/6.jpg)
Page : 5
One Big Issue
![Page 7: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/7.jpg)
Page : 6
vs
Discover gold dust in desert
Discover gold in mine
![Page 8: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/8.jpg)
Page : 7
Garbage in garbage out
ゴミのようなデータを使っていくら
解析しても出てくる結果はゴミばかり
![Page 9: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/9.jpg)
Page : 8
コスト
データ量
現実的ライン
砂漠
鉱山
![Page 10: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/10.jpg)
Page : 9
Do you want to
discover gold in mine?
![Page 11: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/11.jpg)
Page : 10
Garbage to garbage box
ゴミはゴミ箱に捨てて忘れる、という戦略
具体的には
・無計画に保存されたログ
・ルールが無く解釈が困難なログ
・必要な情報が不足しているログ
![Page 12: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/12.jpg)
Page : 11
Strategic Logging
きちんとプランニングした上で分析のためのデータを生成する
プランニング 実装 収集・分析
なんのために?
どんな結果を得たい?
どう行動につなげる?
どうログを送れば
意図した結果を
得ることができるか?
より高速にするには?
どのプロダクトを使うか?
わかりやすい表現は?
![Page 13: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/13.jpg)
Page : 12
Why MongoDB?
![Page 14: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/14.jpg)
Page : 13
Relational DB
Key-value Store
Columnar DB
Document DB
Graph DB
is DocumentDB
Oracle, PostgreSQL, etc
Redis, etc
Hbase , Cassandra, etc
MongoDB, CouchDB , etc
Neo4j, FlockDB, etc
![Page 15: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/15.jpg)
Page : 14
- Structured
- Schemaless
- Scalable
Strategicなログ収集に利用しやすい
MongoDBが持つ3つの特性
![Page 16: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/16.jpg)
Page : 15
Structured
構造化データを持ち、更にクエリを利用できる
activity = {
user:”1”,
date:2011024,
actions:{
battle:[{target:”5”,result:”win”}, {target:”59,result:”lose”}],
paid:[{item:”5”,amount:1,unit:50,price:50}]
}
}
db.activity.find{date:{‘$gte’:20111001,’$lte’:20111015}
インデックスを貼ることができ構造データの高速サーチが可能
![Page 17: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/17.jpg)
Page : 16
Schemaless
構造化されていながら、スキーマを持たず柔軟に利用可能
activity = {
user:”1”,
date:2011024,
actions:{
battle:[{target:”5”,result:”win”}, {target:”59,result:”lose”}],
paid:[{item:”5”,amount:1,unit:50,price:50}]
}
}
ドキュメントによってフィールドがあったりなかったりしてもOK。
後からいくらでも構成変更ができる上、リストを持つことも可能
![Page 18: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/18.jpg)
Page : 17
Scalable
巨大なデータをさばける拡張性と速度
・ログの保存に適した高速なCappedCollectionの提供
※データサイズを固定し、Indexを持たないことで非常に高速に保存可能
読み込みにはtailable cursorを用いる
・fire-and-forgetによる結果を待たないinsert
※unsafeではあるが、高速にクライアントへレスポンスを返す事が可能
・Bulk insertによる一括インサート
などを利用することで、大規模なアプリのストリーミングデータを
取り込むのに十分な性能を出すことができます。
![Page 19: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/19.jpg)
Page : 18
3つの特性を活かすことで効率化がしやすい
![Page 20: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/20.jpg)
Page : 19
Case study
![Page 21: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/21.jpg)
Page : 20
Nijiboxさんのソーシャルアプリ向けに
MongoDBを利用した解析用の
バックエンドシステムを開発
![Page 22: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/22.jpg)
Page : 21
Mission
- 改善のアクションに繋げられるツールを作る
- フロントエンドにやさしいUI
- 効率よく、早く実行できるシステム
- スケーラビリティの高い仕組み
![Page 23: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/23.jpg)
Page : 22
アプリA Clientクラス
アプリB Clientクラス
アプリC Clientクラス
レシーバー
管理画面
Database
各アプリケーションにクライアントライブラリを配布し、
そこから構造化データを送る。データは分析用のクラスタに送られ、
最終的に専用の管理ツールから閲覧できるようになっている。
![Page 24: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/24.jpg)
Page : 23
Httpとjsonが扱えれば使えるコードを提供して導入コストを抑える
フレームワークに組込ロジック側では一文で送信可能に
require_once('Client.php');
$userid = 1000;
$server = "http://xxxx/";
$appid = "test";
Client::init($userid,$server,$appid);
// ここまではフレームワークに組込
// アプリ上ではこの一行でログ送信OK
_ntls()->setAction("mission",array("type"=>"taiman","gekiha" => 100));
![Page 25: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/25.jpg)
Page : 24
内部的には、入ってきたローデータを一度中間形式に変更し
そこから各種解析をかける仕組み。
基本的なデータ(KPI等)は定期的に解析データをキャッシュ。
必要であれば中間データからオンデマンドに解析を実施できる
インターフェイスを提供している。
![Page 26: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/26.jpg)
Page : 25
Point, Challenge
- 開発初期から参加し、どのようなデータを
送るかについて議論した上で進めた
- 認証機構をチームで使っているBacklogを通す事で簡素化
- 能動的に取得するログに絞込むことで負荷軽減
- ログ送信のためのクラスを作り、フレームワークに組込
- 開発チームのメンバが利用できるインターフェイスを用意
![Page 27: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/27.jpg)
Page : 26
Message
![Page 28: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/28.jpg)
Page : 27
Analystになろう
- アナリスト≠技術者。ビジネスやアプリへの理解が必要
- 勿論、解析のためのテクノロジを利用する技術は必要
- それと同等に仮説、マーケ、検証、継続マネジメントも重要
- これから需要は増えそうだが、プレイヤーが少ない
→ 市場価値を高める一手としてオススメ
![Page 29: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/29.jpg)
Page : 28
Questions
![Page 30: Analytics with MongoDB](https://reader030.fdocuments.net/reader030/viewer/2022020217/5562531cd8b42aa02d8b515b/html5/thumbnails/30.jpg)
Thanks
@bibrost