Mais conteúdo relacionado Semelhante a Apache tinkerpopとグラフデータベースの世界 (20) Mais de Yuki Morishita (11) Apache tinkerpopとグラフデータベースの世界2. スピーカー
森下 雄貴
- プリンシパルアーキテクト @ DataStax Japan合同会社
- Apache Cassandra コミッター
DataStax
- Apache Tinkerpop のコードベースの大部分をコミット
- DataStax Enterprise
- マルチモデルデータベース
- Apache Tinkerpopベースのグラフアクセス
9. Tinkerpopのプロパティグラフ
- Graph (グラフ)
- バーテックスとエッジの集合
- Vertex (バーテックス/ノード/頂点)
- ラベルとプロパティを持つ
- Edge (エッジ/辺)
- ラベルとプロパティ、方向を持つ
- Property (プロパティ)
- キーとバリュー
- バーテックスとエッジがプロパティを持つ
- メタプロパティ(プロパティのプロパティ )やマルチプロパティ(複数の値を持つプロパティ )がある
17. Gremlin ~ グラフトラバーサル言語
データの問合せ/操作
- リレーショナルデータベース => SQL
- グラフデータベース => ????
- Cypher / openCypher (Neo4J, SAP HANA Graph …)
- PGQL (Oracle)
- SPARQL (RDFデータベース)
- Gremlin (Apache Tinkerpop実装グラフデータベース )
- ...
25. Gremlin ~ グラフトラバーサル言語
// markoの友達の名前は?
g.V().
has("person", "name", "marko").
out("knows").
values("name")
=> vadas
=> josh
28. 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)
29. 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()
35. デモ: サンプルデータの読み込み
Gremlin IO
- GraphML (XML)
- GraphSON (JSON)
- Gryo (Kryo: Javaのシリアライゼーション形式の一つ)
のデータの読み込み/書き込みをサポート
graph.io(gryo()).readGraph("../data/northwind.kryo")
graph.io(graphson()).writeGraph("../data/northwind.json")
37. デモ: 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")
38. デモ: 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")
39. Gremlinサーバー
- WebSocket / REST APIを介して、グラフデータベースへリモートからアクセス可能に
する
- Apache Tinkerpop対応グラフデータベースへは通常 Gremlinサーバーを経由してアクセス
- Gremlinクエリ / 実行結果は GraphSON もしくは Gryo (JVM言語のみ) としてやり取り
- SSL、ユーザー認証にも対応
アプリケーション
Gremlin
コンソール
Gremlin
サーバー
Tinke
rpop
API
Tinkerpop対応
グラフデータベース
Gremlin
ドライバー GraphSON / Gryo
over
WebSocket / REST
42. デモ: 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]
43. Javaプログラムからのアクセス
- ドライバー gremlin-java をアプリケーションに組み込む
<dependencies>
<dependency>
<groupId>org.apache.tinkerpop</groupId>
<artifactId>gremlin-driver</artifactId>
<version>${tinkerpop.version}</version>
</dependency>
</dependencies>
49. さらに知りたい方
- 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の基本が一通り学べる
- 英語