Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
グラフ型データベース「Amazon Neptune」が丸裸にするクラスメソッド大阪オフィス
Search
TomoyaIwata
October 11, 2019
Technology
3.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
グラフ型データベース 「Amazon Neptune」が丸裸にする クラスメソッド大阪オフィス
2019/10/11に開催されたDevelopers.IO 2019 in 大阪で発表させて頂いた際の資料です
TomoyaIwata
October 11, 2019
More Decks by TomoyaIwata
See All by TomoyaIwata
CIで使うClaude
iwatatomoya
0
440
Lambdaの常識はどう変わる?!re:Invent 2025 before after
iwatatomoya
1
1.3k
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
2.6k
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
6.7k
Qdrantでベクトルデータベースに入門してみよう
iwatatomoya
0
3k
詳解 AWS Lambdaコールドスタート
iwatatomoya
2
3.5k
真のサーバーレスへ向けたAuroraの進化Aurora Limitless Database
iwatatomoya
1
5.1k
AWS SDKのClientはFactory経由で作ろう
iwatatomoya
1
1.1k
OpentelemetryでアプリケーションのObservabilityを強化しよう
iwatatomoya
0
1.4k
Other Decks in Technology
See All in Technology
安心して変更できるWebフロントエンドの作り方
pirosikick
4
2.2k
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
240
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
0
2.1k
Podは生きているのにGoだけが落ちる:GOGCとGOMEMLIMITで追うInvisible OOM Killの謎
tkc66buzz
1
710
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
720
AI時代、データエンジニアが一番おもろい
genshun9
0
560
おい、エージェントを使って終わらせろ
nwiizo
0
210
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
4
570
人間はどの意思決定を手放せるのか
kawasima
14
6k
LTのテーマ どうきめてる?〜5つの型と私のやり方〜
yama3133
1
100
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
3
530
Genieを崇めよ
kameitomohiro
0
120
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
1
540
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
840
First, design no harm
axbom
PRO
2
1.3k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Statistics for Hackers
jakevdp
799
230k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
KATA
mclloyd
PRO
35
15k
Being A Developer After 40
akosma
91
590k
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