[db tech showcase tokyo 2015] e27: neo4jグラフデータベース by...
TRANSCRIPT
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
DB史上最強の頭脳
Neo4j Graph DataBase
Creationline, inc
2015-06-11
C.Lee
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
自己紹介
• 名前
李 昌桓(LEE CHANGHWAN)
• 所属社 クリエーションライン株式会社
http://creationline.com/neo4j
• 事業内容 クラウドインテグレーション、ソリューション事業(Neo4j,MongoDB,Chef,Docker,その他)
• 著書 Amazon Cloudテクニカルガイド,インプレス
Amazon Elastic MapReduceテクニカルガイド,インプレス
• 所属団体 AWSユーザー会
SoftLayerユーザー会
Neo4jユーザー会(http://jp-neo4j-usersgroup.connpass.com/)
1
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
デジタルデータ量の増加予測
3
(出典)総務省「ICTコトづくり検討会議」報告書, 米国の市場調査会社(International Data Corporation)
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
ビッグデータの構成データと 流通量の計量対象データ
4
(出典)総務省「ビッグデータ時代における情報量の計測に係る調査研究」(平成26年)
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
企業等におけるデータ活用の実態
5
(出典)総務省「データの高度な利活用による業務・サービス革新が我が国経済および社会に与える波及効果に係る調査研究」(平成26年)
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
データ利用によって得られる効果 (全体像)
6
(出典)総務省「データの高度な利活用による業務・サービス革新が我が国経済および社会に与える波及効果に係る調査研究」(平成26年)
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
所属部門の業務における データ利用の深度
7
(出典)総務省「データの高度な利活用による業務・サービス革新が我が国経済および社会に与える波及
効果に係る調査研究」(平成26年)
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
データ利用における課題
8
(出典)総務省「データの高度な利活用による業務・サービス革新が我が国経済および社会に与える波及効果に係る調査研究」(平成26年)
10年前のDWH導入における我が国の課題○○と殆ど変わってないじゃないか!?
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
• データの量、種類、発生源、処理手段…
• データの価値…既知 < 未知 • データの関係性…複雑になっていく一方
9
あなたはどこに注目していますか
(出典)情報通信審議会ICT基本戦略ボード「ビッグデータの活用に関するアドホックグループ」資料
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
データ・データ処理とは
• 人間は、世界における自分の居場所のモデルを構築してから、大まかな予測をして未来に向けてのシミュレートをする。
人間は時間という意識を持っている動物である。
『フューチャー・オブ・マインド』、ミチオ・カク(理論物理学者、ニューヨーク市立大学)、NHK出版
• データとは、自分を取り巻く環境との関係性を理解するための材料で
ある
洞窟の壁画、石版、羊の革、紙、デジタル化
洞窟の壁画は、データのお手本…人間が食べる動物、人間を食べる動物が絵かれている。
• データ処理とは、自分(個人・組織)取り巻く、環境や事象との関係性を理
解する事であり、その究極的な価値は、未来の予測可能性にある
様々な道具(算盤…コンピューター)利用し、様々な表現(数字、文字、チャート、グラフ、統計)を取り入れて
いる
洞窟の壁画は、データ処理のお手本…自分達と環境との関係性が適格に理解できるし、未来の予測にも繋がる。
10
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
データ処理の道具
• アーキテクチャー
マスター型/P2P型/イネーブラ型
• データモデル
関係型/カラム指向型/キー・バリュー型/ドキュメント指向型/グラフ型
• SQL/NoSQL(関係型DB/その他)
ANSI・ISO規格/独自のAPI又はQuery言語
• オペレーションDB/レポーティングDB
異なるデータ構想
• インテグレーションDB/アプケーションDB
多言語による実装(RESTful)
12
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
データベースの進化
13
出典:Learning Neo4j、Rik Van Bruggen
コッドさんが、リレーショナルデータベースに関する最初の論文を発表したのが1969年、SQLが登場したのが1976年で、Oracle が登場したのか1983年ですが、この数十年はデータベースにおいても大変動の時代でした。
究極的な関係化
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
グラフ型データベースの座標
14
データのサイズ
データ処理の複雑性(=関係性)
弱 強
強
キー・バリュー型
関係型
グラフ型
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
グラフ型
関係型
弱い関係性と強い関係性
15
弱 強 集計処理 ジョイン 統計処理
パターンマッチング
仕分け
キー・バリュー型 カラム指向型
ドキュメント指向型
専用ツール・API
専門知識が必要
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
グラフの3大の構成要素
• ラベル
テーブルのようなもの。ノードのグループ名称。例)User
• ノード
レコードのようなもの。キー・バリューの属性を持つ。例)U00001
• 関係性
ノードとノードの関係を示す(-->,<--)。キー・バリューの属性を持つ。例)(User)-[:注文した]->(販売履歴)
• 属性
カラムのようなもの(キー:バリュー)。ノードと関係性の両方に存在。
例)(:User {uid:”U00001”, born:1963, gender:”man”})
18
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
データの論理構成
19
キー:バリュー
ノード
• ノードストア
属性1
キー:バリュー キー:バリュー キー:バリュー
属性2 属性3 属性n
キー:バリュー
タイプ(関係性の名称)
• 関係性ストア
属性1
キー:バリュー キー:バリュー キー:バリュー
属性2 属性3 属性n
ラベル(ドメイン)
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
パターン
様々なグラフの形状
グラフは、どのような事象でも抽象化できる
20
A
A B
A’
Learning Neo4j、Rik Van Bruggen
在りのまま
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
データモデル(雛形)
21
ユーザー 販売履歴 注文した
• データモデル ER図と似ていますが、正規化の観点からみると、データのドメイン(エンティティ)を認識する程度の緩いもの であり、在りのまま…ドメイン間の関係性の認識を重視しています
:ラベル
:ラベル
:関係性
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
グラフ化
22 • グラフ データを抽象化した形状のこと。最小単位は1ノード(丸1個)
• データ CSV, JSON
uid U000001
born 1949
gender man
oid 20140905081933-U001343
number 5
price 9359
datetime 2014-09-05 08:19:33
date 2014-09-05
U000001 20140905081933-U001343
:注文した
• グラフ 最小単位は1ノード(丸1個)
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
関係型DBのデータ処理
23
顧客Aの名称、商品名、購入金額を出力する
基本的にインデックスを利用し、データ間の関係性を紐解きながらデータ処理を行う
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
SQL
24
SELECT 顧客.顧客名, 商品.商品名, 販売履歴.数量 *販売履歴.単価 AS 金額
FROM 顧客, 販売履歴, 商品
WHERE 顧客.顧客ID = 販売履歴.顧客ID
AND 顧客.顧客名="A"
AND 販売履歴.商品ID = 商品.商品ID
顧客.顧客名 商品.商品名 金額
A c ¥4,500
関係性をSQLの中に指定してもらう
データの大半は関係性を紐解くことである
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
グラフDBのデータ処理
25
顧客Aの名称、商品名、購入金額を計算する
関係性の永続化 関係性の永続化
関係性が永続化されている 永続化された関係性の上で、パターンマッ
チングを行う
とても複雑なSQL処理、SQLでは不可能な関係性の処理に対応可能である
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
Cypher Query(Neo4j)
26
MATCH (顧客 {顧客名: "A"})-->(販売履歴)-->(商品)
RETRUN 顧客.顧客名, 商品.商品名, 販売履歴.数量 * 販売履歴.単価 AS 金額
顧客.顧客名 商品.商品名 金額
A b ¥4,500
既定の関係性を利用するので、関係性は記号(-->, <--, --)で表現する
関係性を紐解く必要がないため、その余力を強い関係性の処理に当てる
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
トラバーサル処理
27
2014
9m 10m
4d 5d
21h
o2
22h
o4 o7 o6 o1 o3
既に永続化されている関係性を辿って走査する事をトラバーサルという
インデックス・スキャンは、開始ノードの検索に使う
注文番号
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
パターンマッチング
28
グラフ構造に抽象化したデータの処理を行う 最終結果は、CSV、JSON、SVG、PNGなどで出力する
CSV JSON
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
Cypher構文の階層構造は パイプ
29
• SQLは階層間で繋がっている一連のデータ処理 • Cyhperは階層間で独立しているパイプ処理(バケツ・リレー)
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
販売履歴モデル
30
http://www.creationline.com/lab/neo4j
• 売上集計 • クロス集計 • レコメンデーション
:ラベル
:関係性
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
品質管理モデル
31
部品2
部品1
工程1 工程2 工程3 工程4
部品3
部品4
完成品
• 異常を起こしたパーツの工程を追跡 • 工程別、パーツ別の異常頻度の調査や原因調査 • 再発防止策
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
Tokyo Metro Subway System
32
http://graphgist.neo4j.com/#!/gists/all
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
Product Hierarchy
33
http://graphgist.neo4j.com/#!/gists/all
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
Credit Card Fraud Detection
34
http://graphgist.neo4j.com/#!/gists/all
限度額ぎりぎりまでを引き出している 支払期限の違反が標準偏差の2倍 アカウントに複数のユーザー情報が存在する
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
データモデルの事例
35
http://graphgist.neo4j.com/#!/gists/all
Asset
Management,Automobile,Banking,Bi
oinformatics,Biomedical,Business,Bu
siness
Intelligence,Classification,Cloud
Computing,Competitive
Sports,Content
Management,Corporate
Training,Cost Optimization,Data
Science,Data Visualization,Drug
Portfolio,Ecology,Education,Electroni
cs,Entertainment,Environment,Fashio
n,Finance,Food & Beverage...
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
Neo4jとは
• グラフ理論をデータ処理エンジンとして搭載しているDBMS
ネオテクノロージ社のデータベース製品(http://neo4j.com)
• SQLより強い関係性の処理に向いているデータベース
関係性の永続化、パターンマッチング
• Cypher Query(サイファー・クエリ)
SQLライク宣言型のQuery言語、パターンマッチング(SQLで不可能な複雑な関係をも紐解く)
• OLTPエンジン
トランザクション処理OK、分離レベル(Commited Read)、マルチスレッド対応
• インターフェース
Webインテーフェース、Neo4jShell、 RESTfule API, CORE API
• オープンソース版(GPL)と商用版
Community版/Enterprise版(保守、HA、バックアップ、キャッシュ)
37
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
システム構成
38
Cypher Query RESTful API(JSON)
Neo4j-WebInterface FireFox/ IE
バッチ処理
CSV
RESTful API(JSON)
HTTP/HTTPS
スタンドアロン CPU/メモリ/IOPS …食いしん坊
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
バックアップ
39
物理バックアップ
スナップショット
Neo4jBackup
(Online backu, full or
incremental)
DRBD
(Distributed Replicated
Block Device)
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
HA構成
40
• マスター型(水平分散はできない) • スレーブをリードレプリカとして利用可能
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
セキュリティ
• HTTPSを標準実装
クライアントとサーバー間の通信
• DBアクセスはベーシック認証(ユーザID, パスワード) Webインターフェース、Neo4jShell、REST API
• Hosted scripting
サーバーからアクセス元を制限(IP, URLなど)
41
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
データ数の制限
42
Neo4j 2.X
ノード数: 340億 関係性数: 340億 属 性 数:2,740億 関係性のタイプ:32,000
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
Cyhper Query
• グラフ構造のデータ処理のために開発された宣言型Query言語
永続化された関係性の下で、とても短い構文で複雑なデータ処理を可能にする
• パタンマッチング
SQLのジョインを超える複雑な関係性の処理
• スキーマレス
アプリケーションデータベース
• シンプルなデータタイプ
文字列/小数/16進数8進数/整数/ブーリン型
• インデックス
一意性の保障、グラフの開始ノードの検索
• 実行計画
RULE BASE, COST BASE
44
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
Cyper Queryの構文
45
Cypher SQL
MATCH ...RETURN SELECT + JOIN
WHERE WHERE
WITH…パイプ WITH…テンプレート
CREATE CREATE
MERGE CREATE or UPDATE
DELETE DELETE
CREATR INDEX CREATR INDEX
EXPLAIN/PROFILE EXPLAIN PLAN
Cypherは、パターンマッチング(多次元的なジョインが可能)
現実世界のデータは、殆どが多次元的な構造
パターンマッチングの概念に慣れると…その後はSQLよりも遥かに簡単に書ける
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
データ作成・更新・削除
• 作成(CREATE)
CREATE (u:User { uid:“U00001”,born:1963})
• 更新(MATCH ...MERGE)
MATCH (u:User { uid:“U00001”)
MERGE SET u.born=1973
• 削除(MATCH ...DELETE)
MATCH (u:User { uid:“U00001”)
DELETE u
46
アプリケーション-->RESTful APIをラッピングし、データはJSONでやり取りする。
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
BULK DATA(LOAD CSV)
• ソースデータはヘッダ付きのCSV
uid,born,gender
U000001,1949,man
U000002,1979,woman
…
• 登録(LOAD CSV…CREATE) LOAD CSV WITH HEADERS FROM "file:///C:/Temp/data/user.csv" AS line
CREATE (u:User { uid:line.uid, born:toInt(line.born) })
・更新/削除
LOAD CSV...MATCH...MERGE...
LOAD CSV...MATCH...DELETE
47
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
関係性の作成
• MATCH...CREATE
48
U00001 20140905
222502-
U000724
PLACED
{関係性ID: ユーザノードID:販売履歴ノードID:方向}
MATCH (user:User { uid:“U00001}), (order:Order { oid:”20140905222502-U000724”) CREATE (user)-[:PLACED]->(order)
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
トランザクション処理
49
:POST http://localhost:7474/db/data/transaction { "statements" : [ { "statement" : "CREATE (nser:User {props}) RETURN user", "parameters" : { "props" : { "name" : “U00001" } } } ] }
"commit": "http://localhost:7474/db/data/transaction/5/commit”
:POST http://localhost:7474/db/data/transaction/5/commit
• トークン(URI)が返ってくる
• REST APIを実行する
• 空の構文(URI)を実行する
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
デモ1:売上集計:グラフ表現
50
MATCH (y:Year {year:2014})-->(m:Month {month:9})-->(d:Day {day:5})-->(h:Hour {hour:22})-->(o)-[:CONTAINS]->(g) RETURN *
販売履歴
商品
日付
月
日
年
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
デモ2:売上集計:データ表現
51
MATCH (y:Year {year:2014})-->(m:Month {month:9})-->(d:Day {day:5})-->(h:Hour {hour:22})-->(o)-[:CONTAINS]->(g) RETURN g.gid AS 商品, o.number*o.price AS 価格 LIMIT 5 商品 価格 G0038 10,336 G0192 4,288 G0038 15,508 G0175 2,992 G0070 6,098
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
デモ3:レコメンデーション
52
//①売上トップ10のユーザーと金額 MATCH (y:Year {year:2014})-->(m:Month {month:9})-->(d)-->(h)-->(o)<-[:PLACED]-(u) WITH u, sum(o.number * o.price) AS total ORDER BY total DESC LIMIT 10 //②売上トップ10のユーザーが購入した商品一覧 MATCH (u)-->(o)-[:CONTAINS]->(g), (y:Year {year:2014})-->(m:Month {month:9})-->(d)-->(h)-->(o) WITH distinct g //③売上トップ10のユーザーが購入した商品のなかで売れ筋トップ10 MATCH (y:Year {year:2014})-->(m:Month {month:9})-->(d)-->(h)-->(o)-[:CONTAINS]->(g) RETURN * LIMIT 10
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
デモ4:レコメンデーション
53
//①売上トップ10ユーザー
MATCH (y:Year {year:2014})-->(m:Month {month:9})-->(d)-->(h)-->(o)<-[:PLACED]-(u)
WITH u, sum(o.number * o.price) AS total
ORDER BY total DESC
LIMIT 10 //②売上トップ10ユーザーが購入している商品
MATCH (u)-->(o)-[:CONTAINS]->(g), (y:Year {year:2014})-->(m:Month {month:9})-->(d)-->(h)-->(o)
WITH distinct g //③売上トップ10ユーザーが購入している商品で売れ筋トップ10⇒ABC
MATCH (y:Year {year:2014})-->(m:Month {month:9})-->(d)-->(h)-->(o)-[:CONTAINS]->(g)
WITH g.gid AS ggid, sum( o.number * o.price) AS total
ORDER BY total DESC
LIMIT 10 //④ABCのどれらかを購入しているユーザーと商品一覧⇒abc
WITH collect(ggid) AS cggid UNWIND cggid AS gx
MATCH (u)-->(o)-[:CONTAINS]->(g:Goods { gid:gx}), (y:Year {year:2014})-->(m:Month {month:9})-->(d)-->(h)-->(o)
WITH cggid AS list1, u.uid AS uuid, collect(g.gid) AS list2
ORDER BY uuid
//LIMIT 10 //⑤ABCとabcを比較し、購入していないABCを薦める
RETURN uuid AS ユーザID, filter( x IN list1 WHERE NOT ( x IN list2)) AS 推薦商品一覧
LIMIT 10
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
デモ5:クロス集計
54
//①ユーザー毎の売上金額の計算し、CASE文で金額範囲毎のユーザー数にカウントする MATCH (y:Year {year:2014})-->(m:Month {month:9})-->(d)-->(h)-->(o)<-[:PLACED]-(u) WITH u.uid AS uuid, sum(o.number * o.price) AS total WITH CASE WHEN total <10000 THEN count(uuid) END AS lt10000, CASE WHEN total >=10000 AND total <50000 THEN count(uuid) END AS lt50000, CASE WHEN total >=50000 AND total <100000 THEN count(uuid) END AS lt100000, CASE WHEN total >=100000 AND total <150000 THEN count(uuid) END AS lt150000, CASE WHEN total >=150000 THEN count(uuid) END AS gt150000 //②①の結果をリストにまとめる WITH collect(lt10000) AS lt10000, collect(lt50000) AS lt50000, collect(lt100000) AS lt100000, collect(lt150000) AS lt150000, collect(gt150000) AS gt150000 //③結果をリストから取り出す RETURN head(lt10000) AS 金額1万以下, head(lt50000) AS 金額5万以下, head(lt100000) AS 金額10万以下, head(lt150000) AS 金額15万以下, head(gt150000) AS 金額15万上
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
デモ7:最短経路
56
MATCH (startLeaf:Alphabet { name:"A" }), (endLeaf:Alphabet { name:"Z" }), valuePath= shortestPath((startLeaf)-[:NEXT*]->(endLeaf)) RETURN extract( n IN nodes(valuePath) | n.name ) AS 経路, length(valuePath) AS 区間数, reduce(totalCost=0, n IN relationships(valuePath) | totalCost + n.charge) AS 料金 経路 区間数 料金 [A, U, V, W, X, Y, Z] 6 60
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
デモ8:最多経路
57
MATCH (startLeaf:Alphabet { name:"A" }), (endLeaf:Alphabet { name:"Z" }), valuePath=(startLeaf)-[:NEXT*]->(endLeaf) RETURN extract( n IN nodes(valuePath) | n.name ) AS 経路, length(valuePath) AS 区間数, reduce(totalCost=0, n IN relationships(valuePath) | totalCost + n.charge) AS 料金
経路 区間数 料金 [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z] 25 250 [A, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z] 22 220 [A, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z] 18 180 [A, B, C, D, E, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z] 22 220 [A, E, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z] 19 190 [A, O, P, Q, R, S, T, U, V, W, X, Y, Z] 12 120 [A, B, C, D, E, F, G, H, I, O, P, Q, R, S, T, U, V, W, X, Y, Z] 20 200 [A, E, F, G, H, I, O, P, Q, R, S, T, U, V, W, X, Y, Z] 17 170 [A, I, O, P, Q, R, S, T, U, V, W, X, Y, Z] 13 130 [A, B, C, D, E, I, O, P, Q, R, S, T, U, V, W, X, Y, Z] 17 170 [A, E, I, O, P, Q, R, S, T, U, V, W, X, Y, Z] 14 140 [A, U, V, W, X, Y, Z] 6 60 [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, U, V, W, X, Y, Z] 20 200 [A, E, F, G, H, I, J, K, L, M, N, O, U, V, W, X, Y, Z] 17 170 [A, I, J, K, L, M, N, O, U, V, W, X, Y, Z] 13 130 [A, B, C, D, E, I, J, K, L, M, N, O, U, V, W, X, Y, Z] 17 170 [A, E, I, J, K, L, M, N, O, U, V, W, X, Y, Z] 14 140 [A, O, U, V, W, X, Y, Z] 7 70 [A, B, C, D, E, F, G, H, I, O, U, V, W, X, Y, Z] 15 150 [A, E, F, G, H, I, O, U, V, W, X, Y, Z] 12 120 [A, I, O, U, V, W, X, Y, Z] 8 80 [A, B, C, D, E, I, O, U, V, W, X, Y, Z] 12 120 [A, E, I, O, U, V, W, X, Y, Z] 9 90
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
可視化の意義①
• グラフの正確さを検証する
グラフは、殆どが多次元表現であるために関係性が正しく作られているのかどうかは、サンプルを出力してみな
いと検証が困難である
58
Learning Neo4j、Rik Van Bruggen
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
可視化の意義②
• パターンマッチンがイメージできる
グラフのパターンから構文を検証しなら最終結果に辿りつく。特に複雑なパターンマッチングの構文作成では、
不可欠である。
59
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
顧客分布スナップショット
62
http://www.creationline.com/neo4j/customers.html
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
Neo4jに向いている用途
• 様々強い関係性のデータ処理
パターンマッチング(様々な多次元的な関係表現)、とても深い階層関係など
• SQLでは表現できないデータ表現
経路(路線、流通、SCM)や製造工程などフローを伴うデータ処理
• 統計処理に不向きの因果関係のデータ表現
より小規模で個別的な繋がり、人の直観との共同作業で関係を紐解く
• 試行錯誤的なアプローチ
仮説→検証→仮説…Cypher
• 普通の集計処理をするとどうなるの?
処理できますが…「コスト < 価値」をどのように引き出すか?
63
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
Neo4j関連情報
参考資料 http://neo4j.com/docs/
http://www.creationline.com/neo4j
http://graphgist.neo4j.com/#!/gists/all
関連記事
http://www.creationline.com/lab/neo4j
http://qiita/awk256/itmes
64
Copyright ⓒ2015 CREATIONLINE, INC. All Rights Reserved
Neo4jユーザーグループ
• ホームページ http://jp-neo4j-usersgroup.connpass.com/
https://sites.google.com/site/japanneo4jusergroup/
https://www.facebook.com/neo4jusersgroup
@Neo4jUsersGroup
• 活動 無料セミナー, 執筆
65