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)

PPTX
Neo4j の「データ操作プログラミング」から 「ビジュアライズ」まで
Keiichiro Seida
 
PDF
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
 
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
NTT DATA Technology & Innovation
 
PPTX
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
NTT DATA Technology & Innovation
 
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
NTT DATA Technology & Innovation
 
PDF
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
Recruit Technologies
 
PDF
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
 
PDF
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
PDF
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
PDF
Cosine Based Softmax による Metric Learning が上手くいく理由
tancoro
 
PDF
機械学習で泣かないためのコード設計
Takahiro Kubo
 
PDF
Dockerからcontainerdへの移行
Kohei Tokunaga
 
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 
PPTX
アプリケーション開発者のためのAzure Databricks入門
Yoichi Kawasaki
 
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
 
PDF
Apache Kafka 0.11 の Exactly Once Semantics
Yoshiyasu SAEKI
 
PDF
AWSではじめるMLOps
MariOhbuchi
 
PDF
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
 
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
 
PDF
日本語テストメソッドについて
kumake
 
Neo4j の「データ操作プログラミング」から 「ビジュアライズ」まで
Keiichiro Seida
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
NTT DATA Technology & Innovation
 
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
NTT DATA Technology & Innovation
 
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
NTT DATA Technology & Innovation
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
Recruit Technologies
 
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
 
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
Cosine Based Softmax による Metric Learning が上手くいく理由
tancoro
 
機械学習で泣かないためのコード設計
Takahiro Kubo
 
Dockerからcontainerdへの移行
Kohei Tokunaga
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 
アプリケーション開発者のためのAzure Databricks入門
Yoichi Kawasaki
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
 
Apache Kafka 0.11 の Exactly Once Semantics
Yoshiyasu SAEKI
 
AWSではじめるMLOps
MariOhbuchi
 
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
 
日本語テストメソッドについて
kumake
 

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 (10)

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
 
PPT
Cassandraのしくみ データの読み書き編
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
 
Cassandraのしくみ データの読み書き編
Yuki Morishita
 
Ad

Recently uploaded (9)

PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
PDF
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
2023年版Web3技術の理想と現実
Syuhei Hiya
 
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
2023年版Web3技術の理想と現実
Syuhei Hiya
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 

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