Slide 1

Slide 1 text

グラフ型データベース 「Amazon Neptune」が丸裸にする クラスメソッド⼤阪オフィス 2019年10⽉11⽇ CX事業本部 岩⽥ 智哉

Slide 2

Slide 2 text

スライドは後で⼊⼿することが出来ますので 発表中の内容をメモする必要はありません。 写真撮影をする場合は フラッシュ・シャッター⾳が出ないようにご配慮ください Attention

Slide 3

Slide 3 text

3 ⾃⼰紹介 lクラスメソッド株式会社 lサーバーレス開発部 改め CX事業本部 l⼤阪オフィス所属 l好きなAWSサービス: AWS Lambda 岩⽥ 智哉

Slide 4

Slide 4 text

4 今⽇話したいこと ・グラフ型データベースに関する基礎 ・Amazon Neptuneに関する基礎 ・グラフ型データベースを使った分析例

Slide 5

Slide 5 text

5 想定しているターゲット ・グラフ型データベースが何か分からない⼈ ・Amazon Neptuneが何か分からない⼈

Slide 6

Slide 6 text

6 グラフ型データベースis何︖

Slide 7

Slide 7 text

7 グラフ型データベースとは • グラフ構造を表現することに特化したDB • データ間の関連性をネットワーク構造で表現 • プロパティグラフモデルとRDFモデルに⼤別さ れる ※本セッションではプロパティグラフモデルのみ扱います

Slide 8

Slide 8 text

8 プロパティグラフモデルの構成要素 • ノード(頂点) • グラフの基礎となるエンティティ • エッジ(リレーション) • ノード間の関連性を表す要素 • ラベル • ノード・エッジの種別を表す付加情報 • プロパティ • ノード・エッジの属性情報

Slide 9

Slide 9 text

9 プロパティグラフモデルの構成要素 person event person person name:user1 age: 30 name:Developers.IO 2019 in ⼤阪 date:2019/10/11 join join join person join name:user2 age: 32 name:user4 age: 28 name:user3 age: 40

Slide 10

Slide 10 text

10 プロパティグラフモデルの構成要素(ノード) person event person person name:user1 age: 30 name:Developers.IO 2019 in ⼤阪 date:2019/10/11 join join join person join name:user2 age: 32 name:user4 age: 28 name:user3 age: 40 ノード ノード ノード ノード ノード

Slide 11

Slide 11 text

11 プロパティグラフモデルの構成要素(エッジ) person event person person name:user1 age: 30 name:Developers.IO 2019 in ⼤阪 date:2019/10/11 join join join person join name:user2 age: 32 name:user4 age: 28 name:user3 age: 40 エッジ エッジ エッジ エッジ

Slide 12

Slide 12 text

12 プロパティグラフモデルの構成要素(ラベル) person event person person name:user1 age: 30 name:Developers.IO 2019 in ⼤阪 date:2019/10/11 join join join person join name:user2 age: 32 name:user4 age: 28 name:user3 age: 40 ラベル ラベル ラベル ラベル ラベル ラベル ラベル ラベル ラベル

Slide 13

Slide 13 text

13 プロパティグラフモデルの構成要素(プロパティ) person event person person name:user1 age: 30 name:Developers.IO 2019 in ⼤阪 date:2019/10/11 join join join person join name:user2 age: 32 name:user4 age: 28 name:user3 age: 40 プロパティ プロパティ プロパティ プロパティ プロパティ

Slide 14

Slide 14 text

14 代表的なグラフ型データベース • neo4j • 恐らく現状最も⼈気の⾼いグラフ型データベース • パナマ⽂書の分析で有名に • TitanDB -> JanusGraph • Titanは開発停⽌ TitanからforkしたJanusGraphがLinux Foundation 配下のプロジェクトとして開発継続中 • バックエンドのDBにApache CassandraやElasticsearchが利⽤可能

Slide 15

Slide 15 text

15 グラフ型データベースのユースケース • ソーシャルネットワーキング • レコメンデーション • 最短経路や配送ルートの検索 • ネットワーク機器の管理

Slide 16

Slide 16 text

16 クエリ⾔語 • Cypher • neo4jで利⽤ • Gremlin • 様々なグラフ型データベースで利⽤可能な標準化されたクエリ ⾔語 • SPARQL • RDFモデルで利⽤するクエリ⾔語

Slide 17

Slide 17 text

17 Amazon Neptuneとは • AWSが提供するフルマネージドなグラフDBサービス • クエリ⾔語はGremlinとSPARQLに対応 • 毎秒100,000件のクエリをサポート • 最⼤15個のリードレプリカをサポート • インデックスの作成が不要

Slide 18

Slide 18 text

18 Amazon Neptuneの利⽤事例 NIKEアプリのバックエンドで利⽤ • Cassandra on EC2の構成からNeptuneへ移⾏ • EC2の保守作業が不要に • 複数のクエリで実現していた処理が1つのクエリで実現可能に • Cassandraよりも少ないvCPU,メモリでも処理が⾼速に • Amazon NeptuneはCloudwatchと統合されているためモニタリ ングがシンプルに

Slide 19

Slide 19 text

19 Amazon Neptuneの料⾦体系 ※2019年9⽉時点の東京リージョンでの料⾦ インスタンスタイプ 料⾦ db.r5.large 0.42USD/時間 db.r5.xlarge 0.84USD/時間 db.r5.2xlarge 1.68USD/時間 db.r5.4xlarge 3.36USD/時間 db.r5.12xlarge 10.08USD/時間 db.r4.large 0.42USD/時間 db.r4.xlarge 0.84USD/時間 db.r4.2xlarge 1.68USD/時間 db.r4.4xlarge 3.36USD/時間 db.r4.8xlarge 6.72USD/時間 ストレージ料⾦ GB あたり⽉額料⾦ 0.12USD I/O 料⾦ 0.24USD/100 万件のリクエスト オンデマンドのインスタンス料⾦ データベースストレージおよびIO バックアップストレージ ストレージスナップショット料⾦ GB あたり⽉額 0.023USD インターネットへのデータ転送送信 (アウト) 1 GB まで/⽉ 0.00USD/GB 次の 9.999 TB/⽉ 0.12USD/GB 次の 40 TB/⽉ 0.09USD/GB 次の 100 TB/⽉ 0.07USD/GB 150 TB /⽉より⼤きい 0.05USD/GB

Slide 20

Slide 20 text

20 検証時の注意点 • ⼩さ⽬のインスタンスタイプが選択できない • 停⽌ができない RDSと⽐較すると・・・ 検証⽬的での利⽤時はコストに注意を︕︕

Slide 21

Slide 21 text

21 やってみる

Slide 22

Slide 22 text

22 免責事項 • グラフ理論とか良くわかってません • グラフ型データベースも初⼼者です • モデリングとかクエリとか⾊々おかしい可能性があ ります • グラフ型データベースでこんな遊び⽅ができる と いう参考程度に流し聞きして下さい

Slide 23

Slide 23 text

23 分析対象 • 2019年1⽉からチャットツールをSlackへ段階移⾏ • 2019年7⽉完全移⾏完了 • 1,000以上のパブリックチャンネルが存在 • カスタム絵⽂字4,000オーバー チャンネル#misc-osakaを分析対象に選定

Slide 24

Slide 24 text

24 #misc-osaka • ⼤阪オフィス雑談部屋 • 参加⼈数80名 • (純粋な⼤阪オフィス所属メンバーは約30名) • Publicチャンネルで1,2を争う投稿数の多さ

Slide 25

Slide 25 text

Private subnet 25 構成 Amazon Neptune AWS Cloud VPC Public subnet Amazon EC2 データLoad クエリ発⾏ Amazon Simple Storage Service (S3) AWS Lambda #misc-osakaの やり取りを抽出 抽出結果を S3に保存

Slide 26

Slide 26 text

26 Slackのやり取りを モデリングする

Slide 27

Slide 27 text

27 モデリング

Slide 28

Slide 28 text

28 完成したモデル user post user user name:iwata text: :coffee:ドリップ開始 post react react name:xxx name:yyy name:arigato name:kansya

Slide 29

Slide 29 text

29 紛らわしいので以後は エッジを「ポスト」 ノードを「投稿」 として説明します

Slide 30

Slide 30 text

30 分析してみる

Slide 31

Slide 31 text

31 分析1 岩⽥がリアクションしている相⼿ TOP5

Slide 32

Slide 32 text

32 分析1のクエリ g.V().has('id', '').as('iwata') ¥ .out('react').in('post') ¥ .where(neq('iwata')) ¥ .groupCount().by('name') ¥ .order(local) ¥ .by(values,desc) ¥ .limit(local, 5).unfold();

Slide 33

Slide 33 text

33 岩⽥がよくリアクションしてる⼈ 1位... ⼭下 2位...中安 3位...niino 4位...たまちゃん 5位...沼尻

Slide 34

Slide 34 text

34 岩⽥と⼭下の関連性 post post react post post post post post post react react react

Slide 35

Slide 35 text

35 分析2 岩⽥がリアクションしている相⼿ TOP5 がリアクションしている相⼿ TOP5

Slide 36

Slide 36 text

36 分析2のクエリ g.V().has('id', '').as('iwata')¥ .out('react').in('post').where(neq('iwata'))¥ .groupCount().order(local)¥ .by(values, desc).limit(local, 5)¥ .unfold().select(keys) ¥ .group().by('name')¥ .by(out('react').in('post').groupCount()¥ .by('name').order(local)¥ .by(values, desc).limit(local, 5)).unfold()

Slide 37

Slide 37 text

37 ⼭下ランキング 1位...丸⽑ 2位...たまちゃん 3位...niino 4位...岩⽥ 5位...市⽥

Slide 38

Slide 38 text

38 中安ランキング 1位...⼭下 2位...市⽥ 3位...岩⽥ 4位...沼尻 5位...たまちゃん

Slide 39

Slide 39 text

39 niinoランキング 1位...⼭下 2位...たまちゃん 3位...中安 4位...岩⽥ 5位...meltedice

Slide 40

Slide 40 text

40 たまちゃんランキング 1位...⼭下 2位...中安 3位...岩⽥ 4位...丸⽑ 5位...niino

Slide 41

Slide 41 text

41 沼尻ランキング 1位...⼭下 2位...中安 3位...岩⽥ 4位...丸⽑ 5位...たまちゃん

Slide 42

Slide 42 text

42 リアクション数で表した関連性 user

Slide 43

Slide 43 text

43 分析3 岩⽥に紐付く?? リアクションの使⽤状況

Slide 44

Slide 44 text

44 分析3 :otokoiwata: :iwataryuou: :dragoniwata: :mocchie: :xxxxxxx: :levis:

Slide 45

Slide 45 text

45 分析3 岩⽥系のリアクションが付く 投稿をポストしているメンバーを リアクション別に上位3名 ただし岩⽥は除く

Slide 46

Slide 46 text

46 分析3 こういう投稿が多い ユーザーを集計

Slide 47

Slide 47 text

47 分析3のクエリ g.V().inE('react').has('name',within('otokoiwata',,,))¥ .group().by('name').unfold()¥ .project('react','cnt_by_user')¥ .by(select(keys))¥ .by(select(values).unfold().inV().in('post')¥ .not(has('id’, ‘'))¥ .groupCount().by('name')¥ .order(local).by(values,desc).limit(local,3))

Slide 48

Slide 48 text

48 分析3 ちゃだいん me 丸⽑ 丸⽑ 丸⽑ ちゃだいん ちゃだいん 中安 ⼭⽥

Slide 49

Slide 49 text

49 分析3 ⼭下 motchie 中安 me 中安 たまちゃん ⻄⽥ ⼭下 ⼭下

Slide 50

Slide 50 text

50 分析4 岩⽥が登録したカスタム絵⽂字による リアクションの使⽤状況

Slide 51

Slide 51 text

51 分析4 :kaiserwave: :kaiserwave_rugal: :genocide_cutter:

Slide 52

Slide 52 text

52 カイザーウェーブ ヴォルフガング・クラウザーの超必殺技。初出の『餓狼伝説2』のみ必殺技。後に『ザ・キング・オブ・ ファイターズ』シリーズのルガール・バーンシュタインも必殺技として使⽤。「カイザーウェーブ」と表 記されることもある。 両腕を⼤きく広げて構えた後に前⽅に突き出しながら巨⼤な気弾を放つ⾶び道具。 ⻑⾝のクラウザーが放つに相応しい巨⼤な⾶び道具は当時⼤きなインパクトがあった。後に『KOF'94』の ボスであるルガールが烈⾵拳と共にこの技を使いこなしてみせたことでプレイヤーにさらに衝撃を与え、 『KOF』のボスとして初登場したルガールの⼒量に説得⼒を持たせることにも⼀役買った。 クラウザーとルガールが格闘ゲーム上で初共演した『KOF'98 UM』では彼らが互いにカイザーウェイブを 撃ち合う掛け合いがある(同作では本来カイザーウェイブを使⽤しないオメガ・ルガールもこのときはカ イザーウェイブを使⽤する) 格ゲー.com (https://kakuge.com/wiki/)より引⽤ 概要 カイザーウェイブ

Slide 53

Slide 53 text

53 分析4 あるユーザーが ポストした投稿に :kaiserwave:でリアクションしたユーザー がポストした投稿に :kaiserwave:でリアクション...

Slide 54

Slide 54 text

54 分析4 :kaiserwave:が N連鎖する経路を求める

Slide 55

Slide 55 text

55 分析4のクエリ 1 g.V().repeat(out('post')¥ .inE().has('name','kaiserwave')¥ .outV().dedup()).times(1).path() 経路数:15

Slide 56

Slide 56 text

56 分析4のクエリ 2 g.V().repeat(out('post')¥ .inE().has('name','kaiserwave')¥ .outV().dedup()).times(2).path() 経路数:7

Slide 57

Slide 57 text

57 分析4のクエリ 3 g.V().repeat(out('post')¥ .inE().has('name','kaiserwave')¥ .outV().dedup()).times(3).path() 経路数:9

Slide 58

Slide 58 text

58 kaiserwaveが3連鎖する経路 kaiserwave ※投稿のノードは表⽰を省略 kaiserwave kaiserwave kaiserwave kaiserwave kaiserwave kaiserwave kaiserwave kaiserwave kaiserwave 森岡 kaiserwave kaiserwave kaiserwave

Slide 59

Slide 59 text

59 まとめ

Slide 60

Slide 60 text

60 まとめ • グラフ型データベースを利⽤することで、RDBでは実現 が難しい各種の分析が実現できる • Amazon Neptuneを利⽤することで、他のグラフ型データ ベースでは得られない様々なメリットが享受できる • グラフ型データベースを使った分析は楽しい︕︕

Slide 61

Slide 61 text

61 Amazon Neptuneを 是⾮お試し下さい︕︕ まとめ

Slide 62

Slide 62 text

62 ご静聴ありがとうございました

Slide 63

Slide 63 text

No content