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.

DataStax Enterpriseによる大規模グラフ解析

449 views

Published on

2018/01/29 データ解析について 発表資料

Published in: Technology
  • Be the first to comment

  • Be the first to like this

DataStax Enterpriseによる大規模グラフ解析

  1. 1. DataStax Enterpriseによる 大規模グラフ解析 2018/01/29 データ解析について
  2. 2. スピーカー 森下 雄貴 (yuki@datastax.com) Solutions Architect @ DataStax Japan合同会社 Apache Cassandraコミッター 2
  3. 3. DataStax Enterprise Apache Cassandraを 中核にした製品 + サポート + プロフェッショナル サービス + トレーニング
  4. 4. グラフデータベースとは? - 高度に入り組んだ複雑な関係の(グラフ構造)データを格納、管理、問い合わせるため のデータベース - グラフデータベースのアーキテクチャは、大量のデータが織り成す関係の中から価値 を導き出したり、共通項や例外を見つけ出したりするのに特に適している
  5. 5. プロパティグラフ - ノード(頂点/Vertex)  エンティティ - エッジ(辺/Edge)  リレーション - プロパティ  エンティティやリレーションの属性 Resides Purchased Purchase d Has Belongs To Ships To
  6. 6. セキュリティと不正検知 - 不正、セキュリティリスクを伴う、あるいはコンプライアンス上懸念があるエンティ ティや取り引き、またはやりとりをすばやく特定するにはどうすれば良いか。 - グラフデータベースは、ユーザー、エンティティ、取り引き、イベント、やりとりが 織り成す複雑で高度に入り組む網の中で、数えきれない量の金融取引が関わる関係性 とイベントの干草の中から悪い針をすばやく見つけることが可能。
  7. 7. レコメンデーション/パーソナライズ - 顧客に商品を購入してもらったり、他の顧客に商品をレコメンドしてもらったりする ために、顧客にすばやく、最も効果的に影響を与えるにはどうすれば良いか。 - グラフは、ユーザーのデータや相互関係、過去の振る舞い、やりとりに基づいて、商 品や次のアクションを勧めたり、あるいは宣伝を提示したりするのに最も適している。
  8. 8. マスターデータ管理(MDM) - さまざまな事業部にまたがって統合化されている業務データとそれらの相互関係をす ばやく理解して分析し、顧客の全体像を把握するにはどうすれば良いか。 - グラフにおけるMDMの事例としては、複雑な階層構造やその他の相互関係を持つ 商品カタログやカスタマー360アプリケーションがある。
  9. 9. IoT/資産管理/ネットワーク - 個別に調べるよりも全体として見たほうが、より興味深い傾向がある、データ要素間 で形成される数々の関係を簡単に分析するにはどうすれば良いか。 - グラフはまた、ネットワーク資産(およびそれらの特性や設定)やそれらの時間経過 に伴う相互関係を管理するのにも適したモデル。
  10. 10. RDBMS vs. グラフ - グラフデータベースとRDBMSの主要な違いの一つは、エンティティ/頂点の間の関係が優先付けされ管 理される方法。 - RDBMSでは外部キーを使ってエンティティを二次的に繋ぐのに対し、グラフデータベースにお かえるエッジ(リレーション)は、第1級の重要性を持つ。 - リレーションがグラフデータモデルに明示的に組み込まれる。 - グラフ型のビジネス課題とは、個別のエンティティでなく、エンティティ(頂点)間のリレーション (エッジ)が関心事であるもの。 RDBMS グラフ 「何か」識別できるもの、あるいは追跡するオブジェクト エンティティ ノード(Vertex) 2つのオブジェクトの間のつながりまたは参照 リレーション エッジ(Edge) オブジェクトの特性 属性 プロパティ
  11. 11. DataStax Enterprise (DSE) Graph
  12. 12. Apache Cassandra™との統合 - DSE Graphは、常時オン、どこでも書き込み・読み取り・アクティブの機能、リニア なスケーラビリティ、安定的な低レイテンシーのレスポンスタイム、成熟した運用手 法をはじめとするCassandraの主要な利点を引き継ぐ - その基礎の上に、DSE Graphは適応型のクエリーオプティマイザー、局所性優先のグ ラフデータパーティショナー、分散クエリー実行エンジン、各種のグラフ固有イン デックス構造などを含む、パフォーマンス強化のための機能を追加
  13. 13. DSE Graphとは - 複雑で高度に入り組んだデータをリアルタイムで管理する必要のあるクラウドアプリ ケーションのためのスケールアウト型のグラフデータベース - DSEの中で、Apache Cassandra™に合わせてエンジニアリングしたプロパティグラ フモデルをネイティブでサポート - 大規模なグラフの中でデータ間の関係をすばやく簡単に格納・検索 - DSEとの密接なインテグレーションを介してリアルタイムサーチ、分析グラフクエ リーを組み込みでサポート - DSEのマルチモデルプラットフォームの一要素
  14. 14. DSE Graphのアーキテクチャ DataStax Enterprise Graph Apache TinkerPop™ SparkGraphComputer Apache TinkerPop™ Gremlin Server Apache Spark™ Apache Cassandra™ Storage / Indexing Apache Solr™ Indexing アプリケーション (DataStax Driver) DataStax Studio Apache TinkerPop™ Gremlin Console 3rdパーティ グラフ可視化ツール DSE Server OLAP OLTP
  15. 15. Apache TinkerPop™ - グラフデータベース(OLTP)やグラフデータ分析システム(OLAP)のためのオープン ソースのグラフコンピューティングフレームワーク - グラフのデータ構造(プロパティグラフ)そのものと、それを処理するためのフレーム ワークを提供 - Gremlin: グラフデータベースのための標準言語 - Apache TinkerPop™対応グラフデータベース - DSE Graph - Microsoft Azure CosmosDB - Amazon Neptune - Neo4j - JanusGraph (Titan DBのフォーク) - …
  16. 16. Gremlin - グラフトラバーサル言語 // Lisaが購入した全ての注文を探す g.V().has('customer', 'name', 'Lisa') .out('ordered') .values('number') // Lisaの友人が購入した全ての商品を探す g.V().has('customer', 'name', 'Lisa') .outE('related').has('Type', 'friend') .inV().out('ordered').out('purchased') .values('name’) 1 Customer Name:[Lisa] Age:[32] 2 Order Number:[1234] 5 Product Name:[Socks] Size: [XL] 4 Customer Name:[Frank] Age:[28] 6 Product Name:[Shirt] Size: [XL] 7 Address Stree:[123 West Street] Zip Code:[44534] 11 12 13 14 15 16 17 3 Tag Type:[Color] Value: [White] 18 19 orders Date:[1/1/2016] related Type:Friend resides Since:1/1/2000 ships Shipment Date:1/2/2016 purchased Qty: 42 purchased Qty: 1 has Valid: 1/1/2012 has Valid: 1/1/2012
  17. 17. Gremlinコンソール
  18. 18. DataStax Studio DSEのためのビジュアル開発ツール(Gremlin/CQL)
  19. 19. アプリケーションからの接続 DataStax ドライバー
  20. 20. グラフデータベースのOLTPとOLAP
  21. 21. グラフのOLTPアクセス - ひとつまたは少数のノードからグラフをたどり、答えにたどり着く - 例 - この商品をいつ、だれが購入したか。 - この商品を買った人は、ほかにこのような商品も買っています。 - 協調フィルタリング © DataStax, All Rights Reserved.21
  22. 22. デモ - Northwindデータベース - SQL Serverのデモ用データベース © DataStax, All Rights Reserved.22
  23. 23. デモ - Northwind のデータ(のサブセット)をグラフ形式で取り込み - http://sql2gremlin.com - Northwindデータセットを用いてSQLからgremlinへ - https://github.com/datastax/graph-examples/tree/master/northwind - DSE Graph Loaderを用いてDSEへNorthwindデータを取り込み © DataStax, All Rights Reserved.23
  24. 24. デモ - ある商品をいつだれが買ったか © DataStax, All Rights Reserved.24 g.V().has("product", "id", 3171). 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")
  25. 25. デモ - この商品を買った人は、ほかにこのような商品も買っています。 © DataStax, All Rights Reserved.25 g.V().has("customer", "id", 50).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")
  26. 26. グラフのOLAPクエリ - 非常に密なグラフや大量のブランチがある場合、メモリーやCPUの制限から結果を時 間内に返せない(ディープクエリ) - グラフ内のすべてもしくは大部分のノードやエッジに一度にアクセスする必要がある (スキャンクエリ) このような場合、グラフのOLAPクエリを用いることでパフォーマンスよく回答を得る ことができる。 DSE Graphは以下の二つのOLAPクエリをサポート (DSE Analytics(Spark)機能) - Gremlin OLAP - DSE Graph Frame © DataStax, All Rights Reserved.26
  27. 27. Gremlin OLAP GremlinクエリをSparkGraphComputerを用いて、Sparkクラスタ上で分散実行 © DataStax, All Rights Reserved.27 DataStax Enterprise Graph Apache TinkerPop™ SparkGraphComputer Apache TinkerPop™ Gremlin Server Apache Spark™ Apache Cassandra™ Storage / Indexing Apache Solr™ Indexing DSE Server OLAP OLTP
  28. 28. デモ - ある従業員の1996年7月の売り上げを取得 → OLTP - 全従業員の1996年7月の売り上げからTOP5を取得 → OLAP © DataStax, All Rights Reserved.28 g.V().hasLabel("employee").has("id", within(138, 146)).as("e") out("sold").has("orderDate", between(Instant.parse('1996-07-01T00:00:00Z'), Instant.parse('1996-08-01T00:00:00Z'))). out("contains").group().by(select("e")). by(fold().match( __.as("i").unfold().local(values("quantity", "unitPrice").fold(1, mult)).sum().as("s")).select("s")). next().sort{-it.value}.take(5) g.V().hasLabel("employee").as("e"). out("sold").has("orderDate", between(Instant.parse('1996-07-01T00:00:00Z'), Instant.parse('1996-08-01T00:00:00Z'))). out("contains").group().by(select("e")). by(fold().match( __.as("i").unfold().local(values("quantity", "unitPrice").fold(1, mult)).sum().as("s")).select("s")). next().sort{-it.value}.take(5)
  29. 29. DSE Graph Frame https://www.datastax.com/dev/blog/dse-graph-frame - GraphFrames(http://graphframes.github.io/)の拡張 - ノードのDataFrameとエッジのDataFrameを提供 - Sparkから直接グラフ(ノードとエッジ)へアクセス - Gremlin APIの一部を実装 - グラフデータのバルク処理 - グラフデータとグラフ以外のデータ両方を用いた処理 © DataStax, All Rights Reserved.29
  30. 30. デモ - 商品カテゴリ別商品数 © DataStax, All Rights Reserved.30 val g = spark.dseGraph("northwind") val category = g.V.hasLabel("category").df val inCategory = g.E.hasLabel("inCategory").df // inCategoryエッジをカテゴリーごとに集計 == カテゴリーごとのプロダクト数 // カテゴリー名を取得するためにJOIN val productsByCategory = inCategory.join(category, inCategory.col("dst") === category.col("id")).select("name").groupBy("name").count()
  31. 31. Gremlin OLAP vs DSE GraphFrame Gremlin OLAP - Studio(Gremlin言語)を用いてインタラクティブにグラフ分析 DSE GraphFrame - Sparkアプリケーションとしてグラフ分析 - バルクインサート/アップデート - データのインポート/エクスポート - 単純なフィルタリングや集計処理(Gremlin OLAPよりも速い) © DataStax, All Rights Reserved.31

×