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
3.1k
グラフ型データベース 「Amazon Neptune」が丸裸にする クラスメソッド大阪オフィス
2019/10/11に開催されたDevelopers.IO 2019 in 大阪で発表させて頂いた際の資料です
TomoyaIwata
October 11, 2019
Tweet
Share
More Decks by TomoyaIwata
See All by TomoyaIwata
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
5.6k
Qdrantでベクトルデータベースに入門してみよう
iwatatomoya
0
830
詳解 AWS Lambdaコールドスタート
iwatatomoya
1
2.6k
真のサーバーレスへ向けたAuroraの進化Aurora Limitless Database
iwatatomoya
1
4.8k
AWS SDKのClientはFactory経由で作ろう
iwatatomoya
1
870
OpentelemetryでアプリケーションのObservabilityを強化しよう
iwatatomoya
0
1.1k
AWS Lambdaは俺が作った
iwatatomoya
2
2.6k
SnapStartの未来についての期待と妄想
iwatatomoya
1
1.4k
実例から学ぶ! AWSを活用したシステム開発の勘所
iwatatomoya
1
3.3k
Other Decks in Technology
See All in Technology
Building GoReleaser - from shell script to paid product
caarlos0
0
270
「AI駆動開発」のボトルネック『言語化』を効率化するには
taniiicom
1
160
AI Ready API ─ AI時代に求められるAPI設計とは?/ AI-Ready API - Designing MCP and APIs in the AI Era
yokawasa
21
5.8k
Wasmで社内ツールを作って配布しよう
askua
0
130
P2P ではじめる WebRTC のつまづきどころ
tnoho
1
220
SAE J1939シミュレーション環境構築
daikiokazaki
0
160
Microsoft Defender XDRで疲弊しないためのインシデント対応
sophiakunii
3
400
今日からあなたもGeminiを好きになる
subaruhello
1
590
増え続ける脆弱性に立ち向かう: 事前対策と優先度づけによる 持続可能な脆弱性管理 / Confronting the Rise of Vulnerabilities: Sustainable Management Through Proactive Measures and Prioritization
nttcom
1
180
AI時代の知識創造 ─GeminiとSECIモデルで読み解く “暗黙知”と創造の境界線
nyagasan
0
100
株式会社島津製作所_研究開発(集団協業と知的生産)の現場を支える、OSS知識基盤システムの導入
akahane92
1
1.2k
AIコードアシスタントとiOS開発
jollyjoester
1
230
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Into the Great Unknown - MozCon
thekraken
40
1.9k
We Have a Design System, Now What?
morganepeng
53
7.7k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Six Lessons from altMBA
skipperchong
28
3.9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Building Adaptive Systems
keathley
43
2.7k
Optimizing for Happiness
mojombo
379
70k
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