hbaseでグラフ構造を扱う(開発中)
DESCRIPTION
HadoopTRANSCRIPT
HBaseでグラフ構造を扱う(開発中)
株式会社サイバーエージェントアメーバ事業本部Ameba Technology Laboratory
鈴木 俊裕
自己紹介
• 鈴木 俊裕(すずき としひろ)
• 27歳
• 株式会社サイバーエージェントアメーバ事業本部 Ameba Technology Laboratory
(新卒入社4年目)
• アメーバのログ解析基盤をやっている
• 【Twitter】@brfrn169
今日話すこと
• HBaseでグラフ構造をどう扱うか
背景
• アメーバのソーシャルグラフ
ピグ
なう
グルっぽ
背景
• アメーバのソーシャルグラフ
- 基本的にはMySQLを使っている
➡ マスタの分散が難しい(単一障害点)
➡ シャーディングの管理がめんどくさい
背景
• アメーバのソーシャルグラフ
- 基本的にはMySQLを使っている
➡ マスタの分散が難しい(単一障害点)
➡ シャーディングの管理がめんどくさい
HBaseでやってみよう!
Goals
• 大規模なグラフデータに対して高速に追加・更新処理ができる
• シンプルなクエリを高速に(隣接ノードが取れれば良い)
• オンライン処理
• 運用コストの削減
- 自動的にシャーディング
- 簡単にスケールアウト
Non-Goals
• 複雑なクエリ(マルチホップ)
データモデル
• プロパティグラフ
1
follow
friends
friends
name Suzuki Toshihiro
age 27
name Yasuda Masahiro
age 26
name Fukuda Ichiro
age 28
2
3
date 2011/1/3
date 2011/4/12
date 2011/4/12
アーキテクチャ
• HBase + Gateway(Java)
Client
Gateway Gateway Gateway
RPC
HBase
HDFS
Row Keyの設計
• Row Key : [srcNodeId + type + direction]
• Column Family : “g”
• Column : destNodeId
• Value : Properties
Row Keyの設計
1
2
3
Row Keyの設計
1
2
3
FOLLOW
date 2011/1/12
Row Keyの設計Row Key Column Key Value
Row Keyの設計Row Key Column Key Value
“1,FOLLOW,OUTGOING” g:2 date=2011/1/12“2,FOLLOW,INCOMING” g:1 date=2011/1/12
Row Keyの設計
1
2
3
FOLLOW
date 2011/1/12
Row Keyの設計
1
2
3
FOLLOW
date 2011/1/12
FOLLOWdate 2011/2/9
Row Keyの設計Row Key Column Key Value
“1,FOLLOW,OUTGOING” g:2 date=2011/1/12“2,FOLLOW,INCOMING” g:1 date=2011/1/12
Row Keyの設計Row Key Column Key Value
“1,FOLLOW,OUTGOING” g:2 date=2011/1/12“2,FOLLOW,INCOMING” g:1 date=2011/1/12“2,FOLLOW,OUTGOING” g:3 date=2011/2/9“3,FOLLOW,INCOMING” g:2 date=2011/2/9
Row Keyの設計
1
2
3
FOLLOW
date 2011/1/12
FOLLOWdate 2011/2/9
Row Keyの設計
1
2
3
FOLLOW
date 2011/1/12
FOLLOWdate 2011/2/9
FOLLOWdate 2011/4/20
Row Keyの設計Row Key Column Key Value
“1,FOLLOW,OUTGOING” g:2 date=2011/1/12“2,FOLLOW,INCOMING” g:1 date=2011/1/12“2,FOLLOW,OUTGOING” g:3 date=2011/2/9“3,FOLLOW,INCOMING” g:2 date=2011/2/9
Row Keyの設計Row Key Column Key Value
“1,FOLLOW,OUTGOING” g:2 date=2011/1/12“1,FOLLOW,OUTGOING”
g:3 date=2011/4/20“2,FOLLOW,INCOMING” g:1 date=2011/1/12“2,FOLLOW,OUTGOING” g:3 date=2011/2/9“3,FOLLOW,INCOMING” g:1 date=2011/4/20“3,FOLLOW,INCOMING”
g:2 date=2011/2/9
Row Keyの設計Row Key Column Key Value
“1,FOLLOW,OUTGOING” g:2 date=2011/1/12“1,FOLLOW,OUTGOING”
g:3 date=2011/4/20“2,FOLLOW,INCOMING” g:1 date=2011/1/12“2,FOLLOW,OUTGOING” g:3 date=2011/2/9“3,FOLLOW,INCOMING” g:1 date=2011/4/20“3,FOLLOW,INCOMING”
g:2 date=2011/2/9
結果のソートはどうする?アプリによって違う?
• Define Graph機能
- 予め、どのようなクエリを発行するかを定義
- この定義にしたがって、Row Keyを決める
Row Keyの設計
まとめ
• グラフ構造をオンラインで扱うDBをHBaseで開発中
• 今後、FB出来る内容があれば、FBしていく予定です
• ご清聴ありがとうございました。