Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
グラフ型データベース「Amazon Neptune」が丸裸にするクラスメソッド大阪オフィス
Search
TomoyaIwata
October 11, 2019
Technology
0
2.9k
グラフ型データベース 「Amazon Neptune」が丸裸にする クラスメソッド大阪オフィス
2019/10/11に開催されたDevelopers.IO 2019 in 大阪で発表させて頂いた際の資料です
TomoyaIwata
October 11, 2019
Tweet
Share
More Decks by TomoyaIwata
See All by TomoyaIwata
Qdrantでベクトルデータベースに入門してみよう
iwatatomoya
0
210
詳解 AWS Lambdaコールドスタート
iwatatomoya
1
1.6k
真のサーバーレスへ向けたAuroraの進化Aurora Limitless Database
iwatatomoya
1
4.4k
AWS SDKのClientはFactory経由で作ろう
iwatatomoya
1
690
OpentelemetryでアプリケーションのObservabilityを強化しよう
iwatatomoya
0
900
AWS Lambdaは俺が作った
iwatatomoya
2
2.2k
SnapStartの未来についての期待と妄想
iwatatomoya
1
1.3k
実例から学ぶ! AWSを活用したシステム開発の勘所
iwatatomoya
1
3k
目指せ完全制覇!3大クラウドの認定資格制度と勉強方法について
iwatatomoya
0
9.2k
Other Decks in Technology
See All in Technology
Flutterによる 効率的なAndroid・iOS・Webアプリケーション開発の事例
recruitengineers
PRO
0
120
DynamoDB でスロットリングが発生したとき/when_throttling_occurs_in_dynamodb_short
emiki
0
250
生成AIが変えるデータ分析の全体像
ishikawa_satoru
0
170
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
3
630
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
690
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
230
SRE×AIOpsを始めよう!GuardDutyによるお手軽脅威検出
amixedcolor
0
170
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
890
Making your applications cross-environment - OSCG 2024 NA
salaboy
0
190
『Firebase Dynamic Links終了に備える』 FlutterアプリでのAdjust導入とDeeplink最適化
techiro
0
130
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
310
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
229
18k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Designing the Hi-DPI Web
ddemaree
280
34k
Practical Orchestrator
shlominoach
186
10k
10 Git Anti Patterns You Should be Aware of
lemiorhan
655
59k
Speed Design
sergeychernyshev
25
620
How to train your dragon (web standard)
notwaldorf
88
5.7k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
Building Adaptive Systems
keathley
38
2.3k
A Tale of Four Properties
chriscoyier
156
23k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
For a Future-Friendly Web
brad_frost
175
9.4k
Transcript
グラフ型データベース 「Amazon Neptune」が丸裸にする クラスメソッド⼤阪オフィス 2019年10⽉11⽇ CX事業本部 岩⽥ 智哉
スライドは後で⼊⼿することが出来ますので 発表中の内容をメモする必要はありません。 写真撮影をする場合は フラッシュ・シャッター⾳が出ないようにご配慮ください Attention
3 ⾃⼰紹介 lクラスメソッド株式会社 lサーバーレス開発部 改め CX事業本部 l⼤阪オフィス所属 l好きなAWSサービス: AWS Lambda
岩⽥ 智哉
4 今⽇話したいこと ・グラフ型データベースに関する基礎 ・Amazon Neptuneに関する基礎 ・グラフ型データベースを使った分析例
5 想定しているターゲット ・グラフ型データベースが何か分からない⼈ ・Amazon Neptuneが何か分からない⼈
6 グラフ型データベースis何︖
7 グラフ型データベースとは • グラフ構造を表現することに特化したDB • データ間の関連性をネットワーク構造で表現 • プロパティグラフモデルとRDFモデルに⼤別さ れる ※本セッションではプロパティグラフモデルのみ扱います
8 プロパティグラフモデルの構成要素 • ノード(頂点) • グラフの基礎となるエンティティ • エッジ(リレーション) • ノード間の関連性を表す要素
• ラベル • ノード・エッジの種別を表す付加情報 • プロパティ • ノード・エッジの属性情報
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
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 ノード ノード ノード ノード ノード
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 エッジ エッジ エッジ エッジ
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 ラベル ラベル ラベル ラベル ラベル ラベル ラベル ラベル ラベル
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 プロパティ プロパティ プロパティ プロパティ プロパティ
14 代表的なグラフ型データベース • neo4j • 恐らく現状最も⼈気の⾼いグラフ型データベース • パナマ⽂書の分析で有名に • TitanDB
-> JanusGraph • Titanは開発停⽌ TitanからforkしたJanusGraphがLinux Foundation 配下のプロジェクトとして開発継続中 • バックエンドのDBにApache CassandraやElasticsearchが利⽤可能
15 グラフ型データベースのユースケース • ソーシャルネットワーキング • レコメンデーション • 最短経路や配送ルートの検索 • ネットワーク機器の管理
16 クエリ⾔語 • Cypher • neo4jで利⽤ • Gremlin • 様々なグラフ型データベースで利⽤可能な標準化されたクエリ
⾔語 • SPARQL • RDFモデルで利⽤するクエリ⾔語
17 Amazon Neptuneとは • AWSが提供するフルマネージドなグラフDBサービス • クエリ⾔語はGremlinとSPARQLに対応 • 毎秒100,000件のクエリをサポート •
最⼤15個のリードレプリカをサポート • インデックスの作成が不要
18 Amazon Neptuneの利⽤事例 NIKEアプリのバックエンドで利⽤ • Cassandra on EC2の構成からNeptuneへ移⾏ • EC2の保守作業が不要に
• 複数のクエリで実現していた処理が1つのクエリで実現可能に • Cassandraよりも少ないvCPU,メモリでも処理が⾼速に • Amazon NeptuneはCloudwatchと統合されているためモニタリ ングがシンプルに
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
20 検証時の注意点 • ⼩さ⽬のインスタンスタイプが選択できない • 停⽌ができない RDSと⽐較すると・・・ 検証⽬的での利⽤時はコストに注意を︕︕
21 やってみる
22 免責事項 • グラフ理論とか良くわかってません • グラフ型データベースも初⼼者です • モデリングとかクエリとか⾊々おかしい可能性があ ります •
グラフ型データベースでこんな遊び⽅ができる と いう参考程度に流し聞きして下さい
23 分析対象 • 2019年1⽉からチャットツールをSlackへ段階移⾏ • 2019年7⽉完全移⾏完了 • 1,000以上のパブリックチャンネルが存在 • カスタム絵⽂字4,000オーバー
チャンネル#misc-osakaを分析対象に選定
24 #misc-osaka • ⼤阪オフィス雑談部屋 • 参加⼈数80名 • (純粋な⼤阪オフィス所属メンバーは約30名) • Publicチャンネルで1,2を争う投稿数の多さ
Private subnet 25 構成 Amazon Neptune AWS Cloud VPC Public
subnet Amazon EC2 データLoad クエリ発⾏ Amazon Simple Storage Service (S3) AWS Lambda #misc-osakaの やり取りを抽出 抽出結果を S3に保存
26 Slackのやり取りを モデリングする
27 モデリング
28 完成したモデル user post user user name:iwata text: :coffee:ドリップ開始 post
react react name:xxx name:yyy name:arigato name:kansya
29 紛らわしいので以後は エッジを「ポスト」 ノードを「投稿」 として説明します
30 分析してみる
31 分析1 岩⽥がリアクションしている相⼿ TOP5
32 分析1のクエリ g.V().has('id', '<iwata-id>').as('iwata') ¥ .out('react').in('post') ¥ .where(neq('iwata')) ¥ .groupCount().by('name')
¥ .order(local) ¥ .by(values,desc) ¥ .limit(local, 5).unfold();
33 岩⽥がよくリアクションしてる⼈ 1位... ⼭下 2位...中安 3位...niino 4位...たまちゃん 5位...沼尻
34 岩⽥と⼭下の関連性 post post react post post post post post
post react react react
35 分析2 岩⽥がリアクションしている相⼿ TOP5 がリアクションしている相⼿ TOP5
36 分析2のクエリ g.V().has('id', '<iwata-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()
37 ⼭下ランキング 1位...丸⽑ 2位...たまちゃん 3位...niino 4位...岩⽥ 5位...市⽥
38 中安ランキング 1位...⼭下 2位...市⽥ 3位...岩⽥ 4位...沼尻 5位...たまちゃん
39 niinoランキング 1位...⼭下 2位...たまちゃん 3位...中安 4位...岩⽥ 5位...meltedice
40 たまちゃんランキング 1位...⼭下 2位...中安 3位...岩⽥ 4位...丸⽑ 5位...niino
41 沼尻ランキング 1位...⼭下 2位...中安 3位...岩⽥ 4位...丸⽑ 5位...たまちゃん
42 リアクション数で表した関連性 user
43 分析3 岩⽥に紐付く?? リアクションの使⽤状況
44 分析3 :otokoiwata: :iwataryuou: :dragoniwata: :mocchie: :xxxxxxx: :levis:
45 分析3 岩⽥系のリアクションが付く 投稿をポストしているメンバーを リアクション別に上位3名 ただし岩⽥は除く
46 分析3 こういう投稿が多い ユーザーを集計
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’, ‘<iwata_id>'))¥ .groupCount().by('name')¥
.order(local).by(values,desc).limit(local,3))
48 分析3 ちゃだいん me 丸⽑ 丸⽑ 丸⽑ ちゃだいん ちゃだいん 中安
⼭⽥
49 分析3 ⼭下 motchie 中安 me 中安 たまちゃん ⻄⽥ ⼭下
⼭下
50 分析4 岩⽥が登録したカスタム絵⽂字による リアクションの使⽤状況
51 分析4 :kaiserwave: :kaiserwave_rugal: :genocide_cutter:
52 カイザーウェーブ ヴォルフガング・クラウザーの超必殺技。初出の『餓狼伝説2』のみ必殺技。後に『ザ・キング・オブ・ ファイターズ』シリーズのルガール・バーンシュタインも必殺技として使⽤。「カイザーウェーブ」と表 記されることもある。 両腕を⼤きく広げて構えた後に前⽅に突き出しながら巨⼤な気弾を放つ⾶び道具。 ⻑⾝のクラウザーが放つに相応しい巨⼤な⾶び道具は当時⼤きなインパクトがあった。後に『KOF'94』の ボスであるルガールが烈⾵拳と共にこの技を使いこなしてみせたことでプレイヤーにさらに衝撃を与え、 『KOF』のボスとして初登場したルガールの⼒量に説得⼒を持たせることにも⼀役買った。 クラウザーとルガールが格闘ゲーム上で初共演した『KOF'98
UM』では彼らが互いにカイザーウェイブを 撃ち合う掛け合いがある(同作では本来カイザーウェイブを使⽤しないオメガ・ルガールもこのときはカ イザーウェイブを使⽤する) 格ゲー.com (https://kakuge.com/wiki/)より引⽤ 概要 カイザーウェイブ
53 分析4 あるユーザーが ポストした投稿に :kaiserwave:でリアクションしたユーザー がポストした投稿に :kaiserwave:でリアクション...
54 分析4 :kaiserwave:が N連鎖する経路を求める
55 分析4のクエリ 1 g.V().repeat(out('post')¥ .inE().has('name','kaiserwave')¥ .outV().dedup()).times(1).path() 経路数:15
56 分析4のクエリ 2 g.V().repeat(out('post')¥ .inE().has('name','kaiserwave')¥ .outV().dedup()).times(2).path() 経路数:7
57 分析4のクエリ 3 g.V().repeat(out('post')¥ .inE().has('name','kaiserwave')¥ .outV().dedup()).times(3).path() 経路数:9
58 kaiserwaveが3連鎖する経路 kaiserwave ※投稿のノードは表⽰を省略 kaiserwave kaiserwave kaiserwave kaiserwave kaiserwave kaiserwave
kaiserwave kaiserwave kaiserwave 森岡 kaiserwave kaiserwave kaiserwave
59 まとめ
60 まとめ • グラフ型データベースを利⽤することで、RDBでは実現 が難しい各種の分析が実現できる • Amazon Neptuneを利⽤することで、他のグラフ型データ ベースでは得られない様々なメリットが享受できる •
グラフ型データベースを使った分析は楽しい︕︕
61 Amazon Neptuneを 是⾮お試し下さい︕︕ まとめ
62 ご静聴ありがとうございました
None