Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

594 views

Published on

JJUG CCC Spring 2018 発表資料
#jjug_ccc #ccc_l4

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Apache Tinkerpop とグラフデータベースの世界 JJUG CCC 2018 Spring 森下 雄貴
  2. 2. スピーカー 森下 雄貴 - プリンシパルアーキテクト @ DataStax Japan合同会社 - Apache Cassandra コミッター DataStax - Apache Tinkerpop のコードベースの大部分をコミット - DataStax Enterprise - マルチモデルデータベース - Apache Tinkerpopベースのグラフアクセス
  3. 3. グラフ
  4. 4. グラフデータベース グラフのデータ構造をそのまま扱うことができるデータベース → “つながり”をそのままデータとして持つ
  5. 5. グラフデータベースの利用例 - 不正検知 - 取引、ユーザー、端末、場所などの情報を結び付け、不正な取引との関連を調べる - レコメンデーション/パーソナライズ - ユーザーの振舞い、取引をすべて結び付け、次のアクションを相互の関連から提示 - カスタマー360 / マスターデータ管理 - 複雑な階層構造を持つデータの管理
  6. 6. Apache Tinkerpopプロジェクト - https://tinkerpop.apache.org/ - 2015年からApacheプロジェクト - 最新バージョン(2018年5月): v3.3.3 - Java!
  7. 7. Apache Tinkerpopプロジェクト - グラフデータベース(OLTP)とグラフ分析(OLAP)のためのグラフコンピューティングフ レームワーク - グラフのデータ構造 (プロパティグラフ)とAPI - TinkerGraph - インメモリのグラフデータベース実装 - Gremlin - グラフトラバーサル言語 - gremlin-console - 対話的にGremlinを実行するためのコンソール - gremlin-server - リモートからグラフデータベースへアクセス - ドライバー - Java、Python、C#、...
  8. 8. Apache Tinkerpopプロジェクト Azure CosmosDB Amazon Neptune
  9. 9. Tinkerpopのプロパティグラフ - Graph (グラフ) - バーテックスとエッジの集合 - Vertex (バーテックス/ノード/頂点) - ラベルとプロパティを持つ - Edge (エッジ/辺) - ラベルとプロパティ、方向を持つ - Property (プロパティ) - キーとバリュー - バーテックスとエッジがプロパティを持つ - メタプロパティ(プロパティのプロパティ )やマルチプロパティ(複数の値を持つプロパティ )がある
  10. 10. Tinkerpopのプロパティグラフ
  11. 11. Tinkerpopのプロパティグラフ グラフ
  12. 12. Tinkerpopのプロパティグラフ バーテックス
  13. 13. Tinkerpopのプロパティグラフ バーテックスラ ベル
  14. 14. Tinkerpopのプロパティグラフ エッジ
  15. 15. Tinkerpopのプロパティグラフ エッジ ラベル
  16. 16. Tinkerpopのプロパティグラフ プロパティ
  17. 17. Gremlin ~ グラフトラバーサル言語 データの問合せ/操作 - リレーショナルデータベース => SQL - グラフデータベース => ???? - Cypher / openCypher (Neo4J, SAP HANA Graph …) - PGQL (Oracle) - SPARQL (RDFデータベース) - Gremlin (Apache Tinkerpop実装グラフデータベース ) - ...
  18. 18. Gremlin ~ グラフトラバーサル言語 グラフトラバーサル: エッジを通ってグラフを辿っていき、答えを見つける。
  19. 19. Gremlin ~ グラフトラバーサル言語 // markoの友達の名前は? g.V(). has("person", "name", "marko"). out("knows"). values("name")
  20. 20. Gremlin ~ グラフトラバーサル言語 // markoの友達の名前は? g.V(). has("person", "name", "marko"). out("knows"). values("name")
  21. 21. Gremlin ~ グラフトラバーサル言語 // markoの友達の名前は? g.V(). has("person", "name", "marko"). out("knows"). values("name")
  22. 22. Gremlin ~ グラフトラバーサル言語 // markoの友達の名前は? g.V(). has("person", "name", "marko"). out("knows"). values("name")
  23. 23. Gremlin ~ グラフトラバーサル言語 // markoの友達の名前は? g.V(). has("person", "name", "marko"). out("knows"). values("name")
  24. 24. Gremlin ~ グラフトラバーサル言語 // markoの友達の名前は? g.V(). has("person", "name", "marko"). out("knows"). values("name")
  25. 25. Gremlin ~ グラフトラバーサル言語 // markoの友達の名前は? g.V(). has("person", "name", "marko"). out("knows"). values("name") => vadas => josh
  26. 26. Gremlin ~ グラフトラバーサル言語 // markoの友達の名前は? g.V(). has("person", "name", "marko"). out("knows"). values("name") ステップ
  27. 27. Gremlin ~ グラフトラバーサル言語 ステップの種類 - filter - map - flatMap - sideEffect - branch
  28. 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. 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()
  30. 30. Gremlin ~ グラフトラバーサル言語 そのほかのGremlinの機能 - 制御 - repeat() / coalesce() /choose() - パターンマッチ - match() - 集計 - count() / groupCount() / sum() / max() ... - グラフ分析エンジンとの連携 - pageRank()
  31. 31. Gremlinコンソール - Gremlinを対話的に実行できるコンソール - https://tinkerpop.apache.org から単体でダウンロード可能 - コンソール内でインメモリのグラフを扱える - リモートのGremlinサーバーへ接続してGremlinの実行も可能(後述)
  32. 32. デモ - Gremlinコンソールの起動 - サンプルグラフデータの読み込み - Gremlinクエリの実行
  33. 33. デモ: サンプルデータの読み込み - SQL2Gremlin - http://sql2gremlin.com - マイクロソフトのSQL Server用デモデータである Northwindデータセットを使って、 SQLとGremlinの両 方の比較
  34. 34. デモ: サンプルデータの読み込み
  35. 35. デモ: サンプルデータの読み込み Gremlin IO - GraphML (XML) - GraphSON (JSON) - Gryo (Kryo: Javaのシリアライゼーション形式の一つ) のデータの読み込み/書き込みをサポート graph.io(gryo()).readGraph("../data/northwind.kryo") graph.io(graphson()).writeGraph("../data/northwind.json")
  36. 36. デモ: Gremlinクエリ // どんなデータが入っているの ? g.V().groupCount().by(label)
  37. 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. 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. 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
  40. 40. Gremlinサーバー - https://tinkerpop.apache.org からGremlinサーバー単体をダウンロード可能 - インメモリのTinkerpopGraphをサーバー側で動かせる
  41. 41. デモ: Gremlinサーバー - 設定ファイル - シリアライゼーション形式や通信形式、認証などの各パラメータを設定 - - デモではサーバー起動時にNorthwindのデータを読み込むよう設定
  42. 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. 43. Javaプログラムからのアクセス - ドライバー gremlin-java をアプリケーションに組み込む <dependencies> <dependency> <groupId>org.apache.tinkerpop</groupId> <artifactId>gremlin-driver</artifactId> <version>${tinkerpop.version}</version> </dependency> </dependencies>
  44. 44. Javaプログラムからのアクセス Gremlinクエリの実行はいくつか方法がある - Gremlinクエリを文字列として投げる - トラバーサルAPIをそのまま使う https://gist.github.com/yukim/6e914f92e3dea4b6ad954e278b273167
  45. 45. クエリ結果の可視化 - 各グラフデータベースベンダー付属のツール
  46. 46. クエリ結果の可視化 - 商用ツール Linkurious (https://linkurio.us/) Keylines (https://cambridge-intelligence.com/keylines/ )
  47. 47. クエリ結果の可視化 - オープンソース - グラフ描画ができるJavaScriptライブラリを利用 - d3.js - Cytoscape.js - など - Graphexp (https://github.com/bricaud/graphexp)
  48. 48. まとめ - グラフデータベースはグラフデータ構造をそのまま扱える - “つながり”に注目すると、さまざまなビジネス課題に応用できる - Apache Tinkerpopはグラフコンピューティングフレームワーク - グラフデータベースに必要な APIやグラフトラバーサル言語 Gremlinを提供 - 実装データベースが増えてきた
  49. 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の基本が一通り学べる - 英語
  50. 50. Q&A

×