SlideShare a Scribd company logo
Apache Tinkerpop
とグラフデータベースの世界
JJUG CCC 2018 Spring
森下 雄貴
スピーカー
森下 雄貴
- プリンシパルアーキテクト @ DataStax Japan合同会社
- Apache Cassandra コミッター
DataStax
- Apache Tinkerpop のコードベースの大部分をコミット
- DataStax Enterprise
- マルチモデルデータベース
- Apache Tinkerpopベースのグラフアクセス
グラフ
グラフデータベース
グラフのデータ構造をそのまま扱うことができるデータベース
→ “つながり”をそのままデータとして持つ
グラフデータベースの利用例
- 不正検知
- 取引、ユーザー、端末、場所などの情報を結び付け、不正な取引との関連を調べる
- レコメンデーション/パーソナライズ
- ユーザーの振舞い、取引をすべて結び付け、次のアクションを相互の関連から提示
- カスタマー360 / マスターデータ管理
- 複雑な階層構造を持つデータの管理
Apache Tinkerpopプロジェクト
- https://tinkerpop.apache.org/
- 2015年からApacheプロジェクト
- 最新バージョン(2018年5月): v3.3.3
- Java!
Apache Tinkerpopプロジェクト
- グラフデータベース(OLTP)とグラフ分析(OLAP)のためのグラフコンピューティングフ
レームワーク
- グラフのデータ構造 (プロパティグラフ)とAPI
- TinkerGraph
- インメモリのグラフデータベース実装
- Gremlin
- グラフトラバーサル言語
- gremlin-console
- 対話的にGremlinを実行するためのコンソール
- gremlin-server
- リモートからグラフデータベースへアクセス
- ドライバー
- Java、Python、C#、...
Apache Tinkerpopプロジェクト
Azure CosmosDB
Amazon Neptune
Tinkerpopのプロパティグラフ
- Graph (グラフ)
- バーテックスとエッジの集合
- Vertex (バーテックス/ノード/頂点)
- ラベルとプロパティを持つ
- Edge (エッジ/辺)
- ラベルとプロパティ、方向を持つ
- Property (プロパティ)
- キーとバリュー
- バーテックスとエッジがプロパティを持つ
- メタプロパティ(プロパティのプロパティ )やマルチプロパティ(複数の値を持つプロパティ )がある
Tinkerpopのプロパティグラフ
Tinkerpopのプロパティグラフ
グラフ
Tinkerpopのプロパティグラフ
バーテックス
Tinkerpopのプロパティグラフ
バーテックスラ
ベル
Tinkerpopのプロパティグラフ
エッジ
Tinkerpopのプロパティグラフ
エッジ
ラベル
Tinkerpopのプロパティグラフ
プロパティ
Gremlin ~ グラフトラバーサル言語
データの問合せ/操作
- リレーショナルデータベース => SQL
- グラフデータベース => ????
- Cypher / openCypher (Neo4J, SAP HANA Graph …)
- PGQL (Oracle)
- SPARQL (RDFデータベース)
- Gremlin (Apache Tinkerpop実装グラフデータベース )
- ...
Gremlin ~ グラフトラバーサル言語
グラフトラバーサル:
エッジを通ってグラフを辿っていき、答えを見つける。
Gremlin ~ グラフトラバーサル言語
// markoの友達の名前は?
g.V().
has("person", "name", "marko").
out("knows").
values("name")
Gremlin ~ グラフトラバーサル言語
// markoの友達の名前は?
g.V().
has("person", "name", "marko").
out("knows").
values("name")
Gremlin ~ グラフトラバーサル言語
// markoの友達の名前は?
g.V().
has("person", "name", "marko").
out("knows").
values("name")
Gremlin ~ グラフトラバーサル言語
// markoの友達の名前は?
g.V().
has("person", "name", "marko").
out("knows").
values("name")
Gremlin ~ グラフトラバーサル言語
// markoの友達の名前は?
g.V().
has("person", "name", "marko").
out("knows").
values("name")
Gremlin ~ グラフトラバーサル言語
// markoの友達の名前は?
g.V().
has("person", "name", "marko").
out("knows").
values("name")
Gremlin ~ グラフトラバーサル言語
// markoの友達の名前は?
g.V().
has("person", "name", "marko").
out("knows").
values("name")
=> vadas
=> josh
Gremlin ~ グラフトラバーサル言語
// markoの友達の名前は?
g.V().
has("person", "name", "marko").
out("knows").
values("name")
ステップ
Gremlin ~ グラフトラバーサル言語
ステップの種類
- filter
- map
- flatMap
- sideEffect
- branch
Gremlin ~ グラフトラバーサル言語
// Gremlin
g.V().
has("person", "name", "marko").
out("knows").
values("name")
JavaのStream APIと同じように考えてみるとわかりやすい(かも)
// Java Stream API
Set vertices = ...
vertices.stream().
filter(person -> person.name == "marko").
flatMap(person -> person.knows).
map(person -> person.name)
Gremlin ~ グラフトラバーサル言語
// 新しいmarkoの友達を追加する
g.addV(“person”).
property("name", "yuki").as(“yuki”).
V().has(“person”, “name”, “marko”).
addE(“knows”).to(“yuki”)
// そして削除する
g.V().
has(“person”, “name”, “yuki”).
drop()
Gremlin ~ グラフトラバーサル言語
そのほかのGremlinの機能
- 制御
- repeat() / coalesce() /choose()
- パターンマッチ
- match()
- 集計
- count() / groupCount() / sum() / max() ...
- グラフ分析エンジンとの連携
- pageRank()
Gremlinコンソール
- Gremlinを対話的に実行できるコンソール
- https://tinkerpop.apache.org から単体でダウンロード可能
- コンソール内でインメモリのグラフを扱える
- リモートのGremlinサーバーへ接続してGremlinの実行も可能(後述)
デモ
- Gremlinコンソールの起動
- サンプルグラフデータの読み込み
- Gremlinクエリの実行
デモ: サンプルデータの読み込み
- SQL2Gremlin
- http://sql2gremlin.com
- マイクロソフトのSQL Server用デモデータである Northwindデータセットを使って、 SQLとGremlinの両
方の比較
デモ: サンプルデータの読み込み
デモ: サンプルデータの読み込み
Gremlin IO
- GraphML (XML)
- GraphSON (JSON)
- Gryo (Kryo: Javaのシリアライゼーション形式の一つ)
のデータの読み込み/書き込みをサポート
graph.io(gryo()).readGraph("../data/northwind.kryo")
graph.io(graphson()).writeGraph("../data/northwind.json")
デモ: Gremlinクエリ
// どんなデータが入っているの ?
g.V().groupCount().by(label)
デモ: Gremlinクエリ
// イクラを誰が、いつ、いくつ買った ?
g.V().has("product", "name", "Ikura").
in("is").as("item").
in("contains").
order().by("orderDate", decr).limit(10).as("order").
in("ordered").as("customer").
select("customer", "order", "item").
by("name").by("orderDate").by("quantity")
デモ: Gremlinクエリ
// この商品を買った人は、ほかにこのような商品も買っています。
// (リアルタイム協調フィルタリング )
g.V().has("customer", "name", “Paul Henriot”).as("customer").
out("ordered").out("contains").out("is").aggregate("products").
in("is").in("contains").in("ordered").where(neq("customer")).
out("ordered").out("contains").out("is").where(without("products")).
groupCount().order(local).by(values, decr).
select(keys).limit(local, 5).unfold().values("name")
Gremlinサーバー
- WebSocket / REST APIを介して、グラフデータベースへリモートからアクセス可能に
する
- Apache Tinkerpop対応グラフデータベースへは通常 Gremlinサーバーを経由してアクセス
- Gremlinクエリ / 実行結果は GraphSON もしくは Gryo (JVM言語のみ) としてやり取り
- SSL、ユーザー認証にも対応
アプリケーション
Gremlin
コンソール
Gremlin
サーバー
Tinke
rpop
API
Tinkerpop対応
グラフデータベース
Gremlin
ドライバー GraphSON / Gryo
over
WebSocket / REST
Gremlinサーバー
- https://tinkerpop.apache.org からGremlinサーバー単体をダウンロード可能
- インメモリのTinkerpopGraphをサーバー側で動かせる
デモ: Gremlinサーバー
- 設定ファイル
- シリアライゼーション形式や通信形式、認証などの各パラメータを設定
-
- デモではサーバー起動時にNorthwindのデータを読み込むよう設定
デモ: Gremlinサーバー
- Gremlinコンソールから接続してみる
gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Configured localhost/127.0.0.1:8182
gremlin> :remote console
==>All scripts will now be sent to Gremlin Server - [localhost/127.0.0.1:8182] - type
':remote console' to return to local mode
gremlin> g
==>graphtraversalsource[tinkergraph[vertices:3209 edges:6177], standard]
Javaプログラムからのアクセス
- ドライバー gremlin-java をアプリケーションに組み込む
<dependencies>
<dependency>
<groupId>org.apache.tinkerpop</groupId>
<artifactId>gremlin-driver</artifactId>
<version>${tinkerpop.version}</version>
</dependency>
</dependencies>
Javaプログラムからのアクセス
Gremlinクエリの実行はいくつか方法がある
- Gremlinクエリを文字列として投げる
- トラバーサルAPIをそのまま使う
https://gist.github.com/yukim/6e914f92e3dea4b6ad954e278b273167
クエリ結果の可視化
- 各グラフデータベースベンダー付属のツール
クエリ結果の可視化
- 商用ツール
Linkurious (https://linkurio.us/) Keylines
(https://cambridge-intelligence.com/keylines/ )
クエリ結果の可視化
- オープンソース
- グラフ描画ができるJavaScriptライブラリを利用
- d3.js
- Cytoscape.js
- など
- Graphexp (https://github.com/bricaud/graphexp)
まとめ
- グラフデータベースはグラフデータ構造をそのまま扱える
- “つながり”に注目すると、さまざまなビジネス課題に応用できる
- Apache Tinkerpopはグラフコンピューティングフレームワーク
- グラフデータベースに必要な APIやグラフトラバーサル言語 Gremlinを提供
- 実装データベースが増えてきた
さらに知りたい方
- https://tinkerpop.apache.org/
- オフィシャルウェブサイト
- https://github.com/krlawrence/graph
- Practical Gremlin: An Apache TinkerPop Tutorial
- 非常に充実したGremlinチュートリアル
- 英語
- https://academy.datastax.com/resources/ds330-datastax-enterprise-graph
- DSE Graphのオンライントレーニング
- 分散データベースを利用して Gremlinの基本が一通り学べる
- 英語
Q&A

More Related Content

What's hot (20)

PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Noritaka Sekiyama
 
PDF
Where狙いのキー、order by狙いのキー
yoku0825
 
PPT
Cassandraのしくみ データの読み書き編
Yuki Morishita
 
PDF
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
 
PDF
GraphQL入門 (AWS AppSync)
Amazon Web Services Japan
 
PDF
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
PDF
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
 
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
 
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
 
PPTX
グラフデータベース入門
Masaya Dake
 
PPTX
Apache Avro vs Protocol Buffers
Seiya Mizuno
 
PPTX
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTT DATA Technology & Innovation
 
PDF
MySQLで論理削除と正しく付き合う方法
yoku0825
 
PDF
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
PDF
知っているようで知らないPAMのお話
Serverworks Co.,Ltd.
 
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
NTT DATA Technology & Innovation
 
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
 
PDF
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
Amazon Web Services Japan
 
PDF
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
 
PDF
異次元のグラフデータベースNeo4j
昌桓 李
 
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Noritaka Sekiyama
 
Where狙いのキー、order by狙いのキー
yoku0825
 
Cassandraのしくみ データの読み書き編
Yuki Morishita
 
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
 
GraphQL入門 (AWS AppSync)
Amazon Web Services Japan
 
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
 
グラフデータベース入門
Masaya Dake
 
Apache Avro vs Protocol Buffers
Seiya Mizuno
 
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTT DATA Technology & Innovation
 
MySQLで論理削除と正しく付き合う方法
yoku0825
 
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
知っているようで知らないPAMのお話
Serverworks Co.,Ltd.
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
NTT DATA Technology & Innovation
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
 
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
Amazon Web Services Japan
 
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
 
異次元のグラフデータベースNeo4j
昌桓 李
 

Similar to Apache tinkerpopとグラフデータベースの世界 (20)

PDF
DataStax EnterpriseでApache Tinkerpop入門
Yuki Morishita
 
PPTX
Data management of cosmos db using apache gremlin
Takao Tetsuro
 
PDF
社会ネットワーク分析第7回
Satoru Mikami
 
PPT
Blueprintsについて
Tetsuro Nagae
 
PDF
イマドキの現場で使えるJavaライブラリ事情
takezoe
 
PPTX
DataStax Enterpriseによる大規模グラフ解析
Yuki Morishita
 
PPTX
分散グラフデータベース DataStax Enterprise Graph
Yuki Morishita
 
PDF
Cassandraとh baseの比較して入門するno sql
Yutuki r
 
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
 
PDF
Scalaプログラミング・マニアックス
Tomoharu ASAMI
 
PDF
KasabiとDydra
Fumihiro Kato
 
PDF
MongoDB2.2の新機能
Shoken Fujisaki
 
PDF
MongoDBざっくり解説
知教 本間
 
PDF
Groovyで楽にSQLを実行してみよう
Akira Shimosako
 
PDF
セマンテックウェブとRDFDB
Hirosuke Asano
 
PDF
Data-Intensive Text Processing with MapReduce ch4
Sho Shimauchi
 
PDF
Treasure Dataを支える技術 - MessagePack編
Taro L. Saito
 
PDF
クラウド・アプリケーション・モデリングへのアプローチ
Tomoharu ASAMI
 
PDF
Shibuya.lisp #28: 仮題: R について
tnoda
 
PPT
Inside mobage platform
Toru Yamaguchi
 
DataStax EnterpriseでApache Tinkerpop入門
Yuki Morishita
 
Data management of cosmos db using apache gremlin
Takao Tetsuro
 
社会ネットワーク分析第7回
Satoru Mikami
 
Blueprintsについて
Tetsuro Nagae
 
イマドキの現場で使えるJavaライブラリ事情
takezoe
 
DataStax Enterpriseによる大規模グラフ解析
Yuki Morishita
 
分散グラフデータベース DataStax Enterprise Graph
Yuki Morishita
 
Cassandraとh baseの比較して入門するno sql
Yutuki r
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
 
Scalaプログラミング・マニアックス
Tomoharu ASAMI
 
KasabiとDydra
Fumihiro Kato
 
MongoDB2.2の新機能
Shoken Fujisaki
 
MongoDBざっくり解説
知教 本間
 
Groovyで楽にSQLを実行してみよう
Akira Shimosako
 
セマンテックウェブとRDFDB
Hirosuke Asano
 
Data-Intensive Text Processing with MapReduce ch4
Sho Shimauchi
 
Treasure Dataを支える技術 - MessagePack編
Taro L. Saito
 
クラウド・アプリケーション・モデリングへのアプローチ
Tomoharu ASAMI
 
Shibuya.lisp #28: 仮題: R について
tnoda
 
Inside mobage platform
Toru Yamaguchi
 
Ad

More from Yuki Morishita (9)

PPTX
Apache cassandra v4.0
Yuki Morishita
 
PPTX
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
Yuki Morishita
 
PPTX
サンプルで学ぶCassandraアプリケーションの作り方
Yuki Morishita
 
PPTX
RDB開発者のためのApache Cassandra データモデリング入門
Yuki Morishita
 
PPTX
事例で学ぶApache Cassandra
Yuki Morishita
 
PPTX
Apache Cassandra最新情報まとめ
Yuki Morishita
 
PDF
Datastax Enterpriseをはじめよう
Yuki Morishita
 
PDF
How you can contribute to Apache Cassandra
Yuki Morishita
 
PDF
CQL3 in depth
Yuki Morishita
 
Apache cassandra v4.0
Yuki Morishita
 
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
Yuki Morishita
 
サンプルで学ぶCassandraアプリケーションの作り方
Yuki Morishita
 
RDB開発者のためのApache Cassandra データモデリング入門
Yuki Morishita
 
事例で学ぶApache Cassandra
Yuki Morishita
 
Apache Cassandra最新情報まとめ
Yuki Morishita
 
Datastax Enterpriseをはじめよう
Yuki Morishita
 
How you can contribute to Apache Cassandra
Yuki Morishita
 
CQL3 in depth
Yuki Morishita
 
Ad

Recently uploaded (9)

PPTX
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
PPTX
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
PDF
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
 
PDF
第3回デジタル理学療法研究会学術大会シンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」の講演資料.
Matsushita Laboratory
 
PDF
2023年版Web3技術の理想と現実
Syuhei Hiya
 
PDF
第3回デジタル理学療法学会のシンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」での話題提供
Matsushita Laboratory
 
PDF
漁船に搭載されている電子装備と漁法について_VRC海洋学研究会_海のLT会発表資料
Yuuitirou528 default
 
PDF
go tool と Minimal Version Selection アルゴリズム
Keisuke Ishigami
 
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
 
第3回デジタル理学療法研究会学術大会シンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」の講演資料.
Matsushita Laboratory
 
2023年版Web3技術の理想と現実
Syuhei Hiya
 
第3回デジタル理学療法学会のシンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」での話題提供
Matsushita Laboratory
 
漁船に搭載されている電子装備と漁法について_VRC海洋学研究会_海のLT会発表資料
Yuuitirou528 default
 
go tool と Minimal Version Selection アルゴリズム
Keisuke Ishigami
 

Apache tinkerpopとグラフデータベースの世界