Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Neo4j User Group.
異次元のグラフデータベースNeo4j
2018/09/17
Neo4j User Group
LEE CHANGHWAN(李 昌桓)
Neo4j User Group.
Neo4jユーザグループ
• Connpass
https://jp-neo4j-usersgroup.connpass.com/
• Facebook
https://www.facebook.com/ne...
Neo4j User Group.
設立
• 2006年1月
事業概要
• クラウドインテグレーション事業
• データ分析サービス事業
• DevOps関連サービス事業
クリエーションラインのホームページ
• https://www.creat...
Neo4j User Group.
自己紹介
李 昌桓 (LEE CHANGHWAN,@awk256)
データベースが大好きなサーバサイドのエンジニア。NoSQLを中核としたビックデータ処理基盤構築のアーキテクトとして
活動している。現在、クリ...
Neo4j User Group. 5
データベースのルネサンス時代
Neo4j User Group. 6
出典:RDB技術者のための
NoSQLガイド,秀和システ
ム,2016
Hadoop
・Apache Hadoop
・Cloudera
・MapR
・Hortonworks
スループット重視
(レポーティ...
Neo4j User Group.
キーバリュー、ワイドカラム、ドキュメント、グラフ
7
ドキュメント(JSON) グラフ
001:‟aaa‟
002.‟bbb‟
003:‟ccc‟
001,title : “Amazo EC2”
001:pr...
Neo4j User Group. 8
区分 NoSQL
データベース KVS ドキュメントDB グラフDB
データモデル キーバリュー ワイドカラム ドキュメント グラフ
OSS ・Redis
・Memcachd
・Riak
・Cassand...
Neo4j User Group.
• マスタ―型(Neo4j)
• P2P型(Peer to Peer, マスターレス)
データベースのアーキテクチャー
9
M
S S
コピー
01-30
01-30 01-30
01-05 06-10
11...
Neo4j User Group. 10
Neo4j User Group.
データ収集PFのツールマッピング
11
Real Time Process
Message Pool
画像/音声
File Store
Near Real Time
Process
Batch Process...
Neo4j User Group. 12
グラフデータベースとは
Neo4j User Group. 13
Neo4j User Group.
グラフとは
14
18世紀頃から続く数学の一分野で
現代においては、 学術や 産業界で
幅広く応用されている
• ケーニヒスベルクの橋(プロイセン王国)の問題
• この橋を「一筆書き」のように歩き渡ることがで...
Neo4j User Group.
プロパティグラフ
15
• コンピューターによる、現代的なグラフ型データ処理の原型
• ノード(点、頂点)とリレーションシップ(線、辺)に属性(情報{Key:Value})を持つ
Neo4j User Group.
究極的なリレーショナル
16
大雑把にいうと、RDBのリレーションをレコードレベルで繋がった状態のデータを形成する。
レコードレベルの関係性はSQL文の
なかで紐解きながらデータ処理を行
う
既に繋がっている...
Neo4j User Group.
グラフデータベースの登場
17
ビュー
API/クエリ言語
アプリケーションフレームワークから
データストア
GDBMSへ
ライブ
ラリ
プログラ
ム
ビュー データ
レポー
ティング
管理
• 学者, 研究...
Neo4j User Group. 18
グラフフォーマットにデータを蓄積し、SQLライクなクエリを投げて分析を行う。
現代のグラフデータ処理
Neo4j User Group.
• AllegroGraph
• AnzoGraph
• ArangoDB
• AWS Neptune
• Azure Cosmos Graph APP
• DataStax Enterprise Graph...
Neo4j User Group.
グラフ処理の言語を名乗るものも数々存在する。
• AQL (ArangoDB Query Language)
• Cypher Query Language (Cypher)
• GraphQL
• Grem...
Neo4j User Group. 21
デモNeo4jの演習データベース使用
Neo4j User Group.
デモ(Neo4jの演習データベース使用)
22
・Keanu Reevesさんを検索
MATCH (p:Person)
WHERE p.name="Keanu Reeves"
RETURN p
・Keanu ...
Neo4j User Group.
Neo4jのWebUI
23
とても高機能で、主に開発でデバックのために利用する。
Neo4j User Group.
Keanu Reevesさんを検索
24
レスポンスは、グラフ表現も、テ
キストやJSON、SVGなども可能で
ある。
これは、レコードです。
カラムではありません。
Neo4j User Group.
Keanu Reevesさんが出演した映画に出演した俳優を検索
25
MATCH (p1:Person)-[r1:ACTED_IN]->(m:Movie)<-[r2:ACTED_IN]-(p2:Person)...
Neo4j User Group.
脚本を書いて、プロヂュースし、監督までしている人材を検索する。
26
実は、レポート呼ばれるものの大半はデータの関係性を理解するために存在する。
Neo4jは、多重の関係性にダイレクトにクエリを投げられる。
Neo4j User Group. 27
Neo4jとは
Neo4j User Group.
Neo4j = 世界で最も知名度の高いグラフ・データベース
アプリケーションのコア・エンジン
• AI・機械学習
• ナレッジグラフ
• マスターデータ・マネジメント
• パーソナル・リコメンド
• 不正利用...
Neo4j User Group.
他のグラフデータエンジンと異なる特徴
• ネイティブのグラフ処理エンジン
グラフは互いに繋がっているデータである。その特性をインデックスのように生かし、高速データ処理を行う。
• ネイティブのグラフデータスト...
Neo4j User Group.
データベースとしての特徴
• スキーマレス
• Cypher(サイファー,クエリ言語)による究極的なジョイン
• 複数ノードのトランザクション処理
ACID一貫性モデル(強い信頼性と一貫性のある書き込み, す...
Neo4j User Group.
Neo4j社
• 2007創業
本社:米国シリコンバレー
社員数90名以上
https://neo4j.com/
• 他拠点:
イギリス、ドイツ、パリ
スウェーデン
• 導入数:
民間企業:250社以上
教育...
Neo4j User Group.
開発の歴史
32
年度 内容 備考
2000* RDBのパフォーマンス問題解決のためのにNeo4jプロタイプ開発(プロパティグラフモデル)
2003 初の現代的なグラフデータベースの製品発表 v1.x
200...
Neo4j User Group.
Neo4j’s Graph Platform
33
グラフデータ分析フラットフォームを目指している
neo4j-etl
Bloom
Graph Algorithms
Procedure
Bolt Driver
Neo4j User Group.
エンタプライズ版 vs コミュニティ版
34
GPL v3ライセンス
この範囲では、コミュ
ニティ版とエンタプラ
イズ版で同じソース
を共有し、公開され
ている
エンタプライズ版
Neo4j社の独自実装
が含...
Neo4j User Group. 35
ユースケース
Neo4j User Group.
様々な業種・業態におけるプロジェクト適用
36
どの企業もビジネスを巡って、攻めと守りの戦略に苦心している。
Neo4jは、まったく異なる観点からのアプローチを提供し、これまで処理困難
だったデータの処理を可...
Neo4j User Group.
THE PANAMA PAPERS
37
1150万点に及ぶ「パナマ文書」は、ドイツの日
刊紙「南ドイツ新聞」が匿名の情報源から入手
し、米非営利組織「国際調査報道ジャーナリス
ト連合」(The Intern...
Neo4j User Group.
The Basic JCIJ Data Model
38
これは、実際に使われたデータモデルの一部である。
Neo4j User Group. 39
関係性の数を数え
てみると、見えて
いるだけで27個で
ある。おそれく、
もっとある。
このようなデータ
をRDBでモデリン
グし、SQLを発行
することは不可能
である。
Neo4j User Group.
Retail Banking - First Party Fraud Impact
• Tens of billions of dollars every year lost by U.S. Banks.(1...
Neo4j User Group.
Retail Banking – First-Party Fraud
• What is it?
– When “people” open many lines of credit with no inten...
Neo4j User Group.
Retail Banking - Synthetic Identities and Fraud Rings
Fraud ring with 4 synthetic identities, 4-5 accoun...
Neo4j User Group.
Retail Banking - Traditional Approaches
Gartner’s Layered Fraud Prevention Approach (4)
(4): Gartner at ...
Neo4j User Group.
Retail Banking - Modeling a Fraud Ring as a Graph
44
グラフモデルでは、わずかな手掛かりの関係性を繋げて詐欺リングの可能性を探索できる。
Neo4j User Group.
Insurance Fraud – “Whiplash for Cash”
• The impact of fraud on the insurance industry is estimated to be...
Neo4j User Group.
Insurance Fraud - “Whiplash for Cash” Example
Six-person collusion results in three false accidents:
Eac...
Neo4j User Group.
Insurance Fraud - Exponential Impacts
Ten people collude to commit insurance fraud, five false accidents...
Neo4j User Group.
Insurance Fraud - Traditional Approaches
Gartner’s Layered Fraud Prevention Approach (4)
(4): Gartner at...
Neo4j User Group.
Insurance Fraud - Modeling Insurance Fraud as a Graph
View of Fraud Ring Inside of a Graph Database
49
グ...
Neo4j User Group.
Knowledge Graph
50
https://neo4j.com/blog/nasa-critical-data-knowledge-graph/?ref=solutions#what-is-know...
Neo4j User Group.
Knowledge Graph
51
従来のインデックシング方式では検索結果に不確実性が多い。
グラフデータモデルで新しい文献検索システムを開発している。
Neo4j User Group.
Knowledge Graph
52
Neo4j User Group.
MDM - Employee Hierarchy
53
この図は、組織の表面的な構成を表しているだけである。
Neo4j User Group.
MDM - Hierarchies in the Real World are Actually Graphs
54
実際のコミュニケーションのフローは、とても複雑である。
Neo4j User Group.
MDM - Employee Roles, Activities, Skills, Degrees, Teams Graph
55
グラフモデルでは、複雑な現実世界をありのままデータモデルにし、クエリが実行で...
Neo4j User Group. 56
開発
Neo4j User Group.
Cypher(サイファー)
57
・究極的なジョイン、グラフサーチ、分析が可能なクエリ―言語である
・言語ドライバー(Bolt Driver)、C#、Java、JavaScript、Python
Neo4j User Group.
グラフデータモデル
58
データの蓄積・探索のための雛形である
これは、「Neo4jの演習データベース」
Movie
[参考]
https://neo4j.com/developer/guide-data-m...
Neo4j User Group.
どのようにデータ構成になっているのか
59
データベース データファイルが格納されているフォルダ
ラベル テーブル格
ノード レコード格
リレーションシップ ★ノードとノードの関係定義するもの(グラフ固有)
...
Neo4j User Group.
「俳優〇〇さんが、映画〇〇に出演している」ー基本的なデータ表現の単位
60
:People
{name:‟Kenau Reeves‟, born:1964}
:Movie
{title:‟The Matrix...
Neo4j User Group.
これがデータベースの中身だとすると
61
テーブル格
リレーションシップの定義
レコード格
Neo4j User Group.
多様な表現が可能である。
例えば、()は、すべてのノードという意味になる
• ()
• (識別子)
• (:ラベル)
• (識別子:ラベル)
ノードの表現
62
Neo4j User Group.
有向グラフと無向グラフ(検索のみ)の表現が可能である。
ワイルドカードや、何ホップ以内、関係性の名称(タイプ)指定などが可能性である。
• ()-->()
• ()<--()
• ()--()
• ()-[*...
Neo4j User Group.
キーとバリューで指定できる。
{Key:Value, Key:Value, Key:Value, …}
• Number, an abstract type, which has the subtypes I...
Neo4j User Group.
ノードを登録する
→Web UI、CLI、APIで実行できる
65
CREATE
(movie:Movie {title:'The Matrix', released:1999, tagline:'Welco...
Neo4j User Group.
• CREATE (keanu)-[:ACTED_IN {roles:['Neo']}]->(movie)
関係性を登録する
66
Neo4j User Group.
• CREATE
CREATE
• READ
MATCH
[WHERE]
RETURN
• UPDATE/DELETE
MATCH
[WHERE]
SET/REMOVE
UPDATE/DELETE
CRUD・...
Neo4j User Group.
大量データをロードする場合(LOAD CSV)
68
LOAD CSV FROM 'file:///C:/temp/csv/artists.csv' AS line
CREATE (:Artist { nam...
Neo4j User Group.
大量データをロードする場合(neo4j-import)
69
neo4j-import --into /opt/disk1/data/neo4j/graph1.db --nodes movies.csv --...
Neo4j User Group.
• JDBC Driver
MySQL, PostgreSQl, Oracle, SQL Servr
• 課題
差分抽出
neo4j-etl
ETL(抽出→転送→ロード)
70
ETL
データソース
Neo4j
Neo4j User Group.
Cyhperが難しいですか?
多様なデータモデルとCypherの例示が見られます!
71
https://neo4j.com/docs/developer-manual/3.3/cypher/
https:/...
Neo4j User Group.
Cyhperが難しいですか?
思い切り、RDB的なことをやってみたらどうでしょうか
72
MATCH (y:Year {year:2014})-->(m:Month {month:9})-->(d)-->(h...
Neo4j User Group.
Blotドライバ―を公式サポートしている。
• .NET
• Java
• Python,
• JavaScript
https://neo4j.com/docs/developer-manual/curre...
Neo4j User Group.
v3.xからグラフデータ処理モデルのアルゴリズムを実装しつつある。
https://neo4j.com/docs/graph-algorithms/3.3/procedures/
2.xまでは全くやっていなか...
Neo4j User Group.
様々な規定を機能がインストールするだけで簡単に使える(300近いの機能)。
• APOC(A Package Of Componen)
https://neo4j-contrib.github.io/neo4...
Neo4j User Group.
Neo4j Desktop
76
統合開発環境であり、Neo4j EEをローカル環境で使える(無償)
Neo4j User Group.
Neo4j Desktop-Bloom
77
コードレスの探索、 ストーリーボード設計でCypherが書けないユーザによるグラフ分析を実現
Neo4j User Group.
可視化では、以下のような選択も
• D3.js https://d3js.org/
• GraphViz http://www.graphviz.org/
• Cytoscape http://www.cyt...
Neo4j User Group. 79
運用
Neo4j User Group.
高可用性 (EEのみ)
80
• マスターのデータを複数のスレーブにレプリケーション
• スレーブから読み込みできるが、本来は負荷分散が目的ではない
• Neo4jは、クエリをどのノードに投げてもMaster...
Neo4j User Group.
高可用性+性能拡張(Causal cluster, EEのみ)
81
• コアは、HA構成になっている
• コアからリードレプリカを拡張する(読み取り負荷分散)
マルチデータセンター
サポートも(新機能)
Neo4j User Group.
増分バックアップを実行し、障害直前の状態をリストアできる。ただし、バックアップは、最後のスナップショットであり、ポ
イントインタイムリカバリはできない。
• フールバックアップ
bin/neo4j-admin...
Neo4j User Group.
• 認証/認可
adminの他、ユーザ作成可能であり、IDとパスワードで管理
ユーザ毎にデータベースへの特権を与える(ロールベースの権限管理)
• 実行プロシーシャー制限可能
dbms.security.pr...
Neo4j User Group.
v3.xに入ってから、監視機能が大幅に強化されている。
• メトリック(EEのみ)
様々なメトリックを提供しており、例えば、遅延クエリが監視できる。
dbms.logs.query.enabled=true(...
Neo4j User Group.
実は、グラフ問題に苦労していませんか
• AI&Machine Learning
• Fraud Detection
• Indetity and Access
• Knlowledge Graph
• Ma...
Neo4j User Group.
Q:Neo4jのリソースサイジングをどうしたらいいですか
A:次のURLを参照してください。
[データサイズを積算]
https://neo4j.com/developer/guide-sizing-and-...
Neo4j User Group.
Q:Neo4jのトランザクション処理は
A:トランザクション処理を開始した時点から複数行の更新が実行できます。
すべて成功しなければ、ロックバックします。
COMMITするまでは、HEAPメモリに保持し、CO...
Neo4j User Group.
Thanks
88
Nächste SlideShare
Wird geladen in …5
×

異次元のグラフデータベースNeo4j

どの企業もビジネスを巡って、攻めと守りの戦略に苦心している。Neo4jは、まったく異なる観点からのアプローチを提供し、これまで処理困難だったデータの処理を可能にしています。

本スライドでは、Neo4j全般を網羅的に紹介しています。

・様々データモデルなかのグラフモデル
・グラフデータベースとは
・Neo4jとは
・Neo4jのユースケース
・Neo4jのCRUD
・Neo4jのアプリケーション開発
・Neo4jの運用

  • Als Erste(r) kommentieren

異次元のグラフデータベースNeo4j

  1. 1. Neo4j User Group. 異次元のグラフデータベースNeo4j 2018/09/17 Neo4j User Group LEE CHANGHWAN(李 昌桓)
  2. 2. Neo4j User Group. Neo4jユーザグループ • Connpass https://jp-neo4j-usersgroup.connpass.com/ • Facebook https://www.facebook.com/neo4jusersgroup • グラフ型データベース入門 - Neo4jを使う https://www.amazon.co.jp/dp/B01EUK5RRQ 2
  3. 3. Neo4j User Group. 設立 • 2006年1月 事業概要 • クラウドインテグレーション事業 • データ分析サービス事業 • DevOps関連サービス事業 クリエーションラインのホームページ • https://www.creationline.com クリエーションライン株式会社 3
  4. 4. Neo4j User Group. 自己紹介 李 昌桓 (LEE CHANGHWAN,@awk256) データベースが大好きなサーバサイドのエンジニア。NoSQLを中核としたビックデータ処理基盤構築のアーキテクトとして 活動している。現在、クリエーションライン在職中… クリエーションライン www.creationline.com Neo4jユーザーグループ jp-neo4j-usersgroup.connpass.com ScyllaDBユーザーグループ scylladb-usergroup-jp.connpass.com [ブログ] www.creationline.com/lab/neo4j www.qiita.com/aw256 [著書] グラフデータベースNeo4jの他 www.amazon.co.jp/李昌桓/e/B004LWEKOU 4
  5. 5. Neo4j User Group. 5 データベースのルネサンス時代
  6. 6. Neo4j User Group. 6 出典:RDB技術者のための NoSQLガイド,秀和システ ム,2016 Hadoop ・Apache Hadoop ・Cloudera ・MapR ・Hortonworks スループット重視 (レポーティング指向) ターンアラウンドタイプ重視 (オペレーション指向) RDB(OLAP, DWH) ・Oracle Exadata ・Teradata ・Netezza ・Redshift RDB(OLTP) ・Oracle ・SQL Server ・MySQL* ・PostgreSQL* グラフDB ・Neo4j スケールアウトできない (*シャーディングでスケールアウト可) スケールアウトできる KVS ・Redies ・Memcache ワイドカラム ・Cassandra ・ScyllaDB ドキュメント ・MongoDB ・Couchbase NoSQL
  7. 7. Neo4j User Group. キーバリュー、ワイドカラム、ドキュメント、グラフ 7 ドキュメント(JSON) グラフ 001:‟aaa‟ 002.‟bbb‟ 003:‟ccc‟ 001,title : “Amazo EC2” 001:price : 3000 001:Author : aaa 002:title : “Cassandra入門” 002:Price : “2000” { _id :001, title : “Amazo EC2”, price : 3000, author : { name : „aaa, address : „xxx‟ phone : „123-1234‟ } } writed
  8. 8. Neo4j User Group. 8 区分 NoSQL データベース KVS ドキュメントDB グラフDB データモデル キーバリュー ワイドカラム ドキュメント グラフ OSS ・Redis ・Memcachd ・Riak ・Cassandra (Datastax) ・HBase(Hdoop) ・MongoDB ・Couchbase ・Neo4j Community 商用製品 ・Oracle NoSQL DB Neo4j EE Oracle クラウド ・Google Cloud Databas ・Amazon ElasticCache ・Azure Redis Cache ・Amazon Dynamo DB ・Google BigTable(HBase) ・Azure Cosmos(ド キュメントAPP) ・IBM Cloudant ・AWS Neptune ・Azure Cosmos Graph APP 出典:RDB技術者のためのNoSQLガイド,秀和システム,2016
  9. 9. Neo4j User Group. • マスタ―型(Neo4j) • P2P型(Peer to Peer, マスターレス) データベースのアーキテクチャー 9 M S S コピー 01-30 01-30 01-30 01-05 06-10 11-15 16-2021-25 26-30 ・ 1台のマスターと、複数レプリカで構成 ・キャパシティーの拡張はスケールアップ ・論理的なデータ数制限はない ・スケールアウトできない 01-05 06-10 01-05 26-30 06-10 11-15 11-15 16-20 16-20 21-25 21-25 01-05 ・ノード間でクロスでN個のレプリカを持つ ・キャパシティの拡張は水平分散スケールアウト ・高可用性と拡張性の両方を満たす構造 ・単一障害点(spof)がない
  10. 10. Neo4j User Group. 10
  11. 11. Neo4j User Group. データ収集PFのツールマッピング 11 Real Time Process Message Pool 画像/音声 File Store Near Real Time Process Batch Process Data Store テキスト GW MQTT? データマート データレイク データソース Data Mart Service Queue 画像処理
  12. 12. Neo4j User Group. 12 グラフデータベースとは
  13. 13. Neo4j User Group. 13
  14. 14. Neo4j User Group. グラフとは 14 18世紀頃から続く数学の一分野で 現代においては、 学術や 産業界で 幅広く応用されている • ケーニヒスベルクの橋(プロイセン王国)の問題 • この橋を「一筆書き」のように歩き渡ることができるか • オイラという学者がグラフを書いて、不可能であることを証明 グ ラ フ は 、 現 実 で 不 要 な も の を 捨 象 化 し 、 本質だけをとらえることによって未知の問題の解決に挑むと ころから生まれた学問である
  15. 15. Neo4j User Group. プロパティグラフ 15 • コンピューターによる、現代的なグラフ型データ処理の原型 • ノード(点、頂点)とリレーションシップ(線、辺)に属性(情報{Key:Value})を持つ
  16. 16. Neo4j User Group. 究極的なリレーショナル 16 大雑把にいうと、RDBのリレーションをレコードレベルで繋がった状態のデータを形成する。 レコードレベルの関係性はSQL文の なかで紐解きながらデータ処理を行 う 既に繋がっている関係性に基づいて より複雑な関係性を探索する
  17. 17. Neo4j User Group. グラフデータベースの登場 17 ビュー API/クエリ言語 アプリケーションフレームワークから データストア GDBMSへ ライブ ラリ プログラ ム ビュー データ レポー ティング 管理 • 学者, 研究者 • 神技を持った人 • 汎用化 • 大衆化
  18. 18. Neo4j User Group. 18 グラフフォーマットにデータを蓄積し、SQLライクなクエリを投げて分析を行う。 現代のグラフデータ処理
  19. 19. Neo4j User Group. • AllegroGraph • AnzoGraph • ArangoDB • AWS Neptune • Azure Cosmos Graph APP • DataStax Enterprise Graph • InfiniteGraph • MarkLogic • Microsoft SQL Server 2017 • Neo4j • OpenLink Virtuoso • Oracle Spatial and Graph • OrientDB • SAP HANA • Sparksee • Sqrrl Enterprise • Teradata Aster List of graph databases 19 グラフデータベースを名乗るものは何十種類もある。 そのなかでも、Neo4jは唯一無二の存在である。
  20. 20. Neo4j User Group. グラフ処理の言語を名乗るものも数々存在する。 • AQL (ArangoDB Query Language) • Cypher Query Language (Cypher) • GraphQL • Gremlin • SPARQL APIs and graph query-programming languages 20
  21. 21. Neo4j User Group. 21 デモNeo4jの演習データベース使用
  22. 22. Neo4j User Group. デモ(Neo4jの演習データベース使用) 22 ・Keanu Reevesさんを検索 MATCH (p:Person) WHERE p.name="Keanu Reeves" RETURN p ・Keanu Reevesさんが出演した映画に出演した俳優を検索 MATCH (p1:Person)-[r1:ACTED_IN]->(m:Movie)<-[r2:ACTED_IN]-(p2:Person) WHERE p1.name="Keanu Reeves" RETURN p1,p2,m,r1,r2 ・脚本を書いて、プロヂュースし、監督までしている人と映画を検索する。 MATCH (a:Person)-[r:WROTE|PRODUCE|DIRECTED]->(b), (a)-[:WROTE]->(b), (a)-[:PRODUCED]->(b) RETURN *
  23. 23. Neo4j User Group. Neo4jのWebUI 23 とても高機能で、主に開発でデバックのために利用する。
  24. 24. Neo4j User Group. Keanu Reevesさんを検索 24 レスポンスは、グラフ表現も、テ キストやJSON、SVGなども可能で ある。 これは、レコードです。 カラムではありません。
  25. 25. Neo4j User Group. Keanu Reevesさんが出演した映画に出演した俳優を検索 25 MATCH (p1:Person)-[r1:ACTED_IN]->(m:Movie)<-[r2:ACTED_IN]-(p2:Person) WHERE p1.name="Keanu Reeves" RETURN p1,p2,m,r1,r2 //RETURN p1.name,type(r1),m.title,type(r2),p2.name
  26. 26. Neo4j User Group. 脚本を書いて、プロヂュースし、監督までしている人材を検索する。 26 実は、レポート呼ばれるものの大半はデータの関係性を理解するために存在する。 Neo4jは、多重の関係性にダイレクトにクエリを投げられる。
  27. 27. Neo4j User Group. 27 Neo4jとは
  28. 28. Neo4j User Group. Neo4j = 世界で最も知名度の高いグラフ・データベース アプリケーションのコア・エンジン • AI・機械学習 • ナレッジグラフ • マスターデータ・マネジメント • パーソナル・リコメンド • 不正利用検知 28
  29. 29. Neo4j User Group. 他のグラフデータエンジンと異なる特徴 • ネイティブのグラフ処理エンジン グラフは互いに繋がっているデータである。その特性をインデックスのように生かし、高速データ処理を行う。 • ネイティブのグラフデータストア RDBやNoSQL、XMLなどに依存しない、グラフデータ構造専用のデータストアを持つために性能面での 圧倒的な優位性を持つ 29
  30. 30. Neo4j User Group. データベースとしての特徴 • スキーマレス • Cypher(サイファー,クエリ言語)による究極的なジョイン • 複数ノードのトランザクション処理 ACID一貫性モデル(強い信頼性と一貫性のある書き込み, すべて成功しないとロールバック) 一般的にNoSQLは、BASE一貫性モデル(結果整合性) • プロシーシャー/ファンクションの実装で分析能力の拡張 • リッチなビュー • 高速処理 30
  31. 31. Neo4j User Group. Neo4j社 • 2007創業 本社:米国シリコンバレー 社員数90名以上 https://neo4j.com/ • 他拠点: イギリス、ドイツ、パリ スウェーデン • 導入数: 民間企業:250社以上 教育期間:20,000校以上 31
  32. 32. Neo4j User Group. 開発の歴史 32 年度 内容 備考 2000* RDBのパフォーマンス問題解決のためのにNeo4jプロタイプ開発(プロパティグラフモデル) 2003 初の現代的なグラフデータベースの製品発表 v1.x 2007 オープンソース版配布開始 v1.x 2011* グラフデータベース業界初のCypher Query言語発表 v1.x 2012 ラベルなどグラフデータモデルの拡張 v1.x 2013* スケーラビリティ、パフォーマンス、Cypher Queryの充実化 v2.x 2015 Cypher Queryのオープンソース化 v2.x 2016* スケーラビリティ、パフォーマンス、標準SDK、ユーザビリティ v3.x発表 2017 社名変更(NeoTechnology社からNeo4j社へ) 2018* Neo4jエコスステム(ETL,BLOOM,グラフアルゴリズム) v3.x
  33. 33. Neo4j User Group. Neo4j’s Graph Platform 33 グラフデータ分析フラットフォームを目指している neo4j-etl Bloom Graph Algorithms Procedure Bolt Driver
  34. 34. Neo4j User Group. エンタプライズ版 vs コミュニティ版 34 GPL v3ライセンス この範囲では、コミュ ニティ版とエンタプラ イズ版で同じソース を共有し、公開され ている エンタプライズ版 Neo4j社の独自実装 が含まれており、ソ ース非公開 コミュニティ版との 差はパフォーマンス と運用面の優位性
  35. 35. Neo4j User Group. 35 ユースケース
  36. 36. Neo4j User Group. 様々な業種・業態におけるプロジェクト適用 36 どの企業もビジネスを巡って、攻めと守りの戦略に苦心している。 Neo4jは、まったく異なる観点からのアプローチを提供し、これまで処理困難 だったデータの処理を可能にしている。
  37. 37. Neo4j User Group. THE PANAMA PAPERS 37 1150万点に及ぶ「パナマ文書」は、ドイツの日 刊紙「南ドイツ新聞」が匿名の情報源から入手 し、米非営利組織「国際調査報道ジャーナリス ト連合」(The International Consortium of Investigative Journalists=ICIJ、本部ワシント ン)が世界の100を超える報道機関に公開。同国 のタックスヘイブン(租税回避地)を利用して 各国指導者や富裕層らが脱税や資金洗浄を行っ ている証拠を示すものになった。 Neo4jがバックエンドのデータストア であり、Neo4jのCypherが分析ツール として使われている。
  38. 38. Neo4j User Group. The Basic JCIJ Data Model 38 これは、実際に使われたデータモデルの一部である。
  39. 39. Neo4j User Group. 39 関係性の数を数え てみると、見えて いるだけで27個で ある。おそれく、 もっとある。 このようなデータ をRDBでモデリン グし、SQLを発行 することは不可能 である。
  40. 40. Neo4j User Group. Retail Banking - First Party Fraud Impact • Tens of billions of dollars every year lost by U.S. Banks.(1) • 25% of total consumer credit charge-offs in the United States.(2) • 10%-20% of unsecured bad debt at leading U.S. and European banks is misclassified, and is actually first party fraud.(3) (1): Experian: http://www.experian.com/assets/decision-analytics/white-papers/first-partyfraud-wp.pdf (2): Experian: http://www.experian.com/assets/decision-analytics/white-papers/first-partyfraud-wp.pdf (3): Business Insider: http://www.businessinsider.com/how-to-use-social-networks-in-the-fight-against- first-party-fraud-2011-3 40 消費者金融において被害額は想像を絶する
  41. 41. Neo4j User Group. Retail Banking – First-Party Fraud • What is it? – When “people” open many lines of credit with no intention of paying them back 41 この詐欺集団は、善良な市民を 装い、作ったカードで支払いを 行うなど普通に生活しながら、 信用を得た後、ある日突然、限 度額までを引き出し、姿を消す という。
  42. 42. Neo4j User Group. Retail Banking - Synthetic Identities and Fraud Rings Fraud ring with 4 synthetic identities, 4-5 accounts for each identity, totaling 18 accounts. Assuming an average of $4K in credit exposure per account, the bank‟s loss could be as high as $72K. 42 この例示では、4つの偽造IDで、それぞれ4~5個のアカウントを作り、18個の口座やカードを持つ 詐欺リングを表している。
  43. 43. Neo4j User Group. Retail Banking - Traditional Approaches Gartner’s Layered Fraud Prevention Approach (4) (4): Gartner at http://www.gartner.com/newsroom/id/1695014 伝統的な手法で、この類の犯罪を摘発することは困難であるという。
  44. 44. Neo4j User Group. Retail Banking - Modeling a Fraud Ring as a Graph 44 グラフモデルでは、わずかな手掛かりの関係性を繋げて詐欺リングの可能性を探索できる。
  45. 45. Neo4j User Group. Insurance Fraud – “Whiplash for Cash” • The impact of fraud on the insurance industry is estimated to be $80 billion annually in the US… and growing.(5) • In the UK, insurers estimate that bogus whiplash claims add $144 per year to each driver’s policy. (6) • Auto insurance fraud adds $200-$300 a year to your individual insurance premium, according to estimates from the National Insurance Crime Bureau (NICB)(7). (5): Coalition against insurance fraud: http://www.insurancefraud.org/article.htm?RecID=3274#.UnWuZ5E7ROA (6): Insurance Fraud Organization: http://www.insurancefraud.org/IFNS-detail.htm?key=17499#.UmmsJyQhZ0o (7): Edmunds: http://www.edmunds.com/auto-insurance/auto-insurance-fraud-what-it-costs-you.html 45 偽の交通事故による被害補償もその被害額は想像を絶するという。
  46. 46. Neo4j User Group. Insurance Fraud - “Whiplash for Cash” Example Six-person collusion results in three false accidents: Each person plays the role of “driver” once and “passenger” twice. Assuming an average claim of $20K per injured person, and $5K per car, the ring can claim $390K in total. 46 加害者と被害者、お医者さん、弁護士など役割分担をしている正当な身分を持つグループが、お小遣い 稼ぎ(?)をする
  47. 47. Neo4j User Group. Insurance Fraud - Exponential Impacts Ten people collude to commit insurance fraud, five false accidents are staged Assuming an average claim of $40K per injured person and $5K per car, the ring can claim up to $1.6M for 40 people injured! where each person plays the role of the driver once, a witness once and a passenger three times. 47 時をおいて、被害者が加害者になったりしながら詐欺行為を繰り返す。
  48. 48. Neo4j User Group. Insurance Fraud - Traditional Approaches Gartner’s Layered Fraud Prevention Approach (4) (4): Gartner at http://www.gartner.com/newsroom/id/1695014 伝統的な手法で、この類の犯罪を摘発することは困難であるという。
  49. 49. Neo4j User Group. Insurance Fraud - Modeling Insurance Fraud as a Graph View of Fraud Ring Inside of a Graph Database 49 グラフモデルでは、わずかな手掛かりの関係性を繋げて詐欺リングの可能性を探索できる。
  50. 50. Neo4j User Group. Knowledge Graph 50 https://neo4j.com/blog/nasa-critical-data-knowledge-graph/?ref=solutions#what-is-knowledge-architecture NASAほどの膨大な文献をもっている組織がいるでしょうか。
  51. 51. Neo4j User Group. Knowledge Graph 51 従来のインデックシング方式では検索結果に不確実性が多い。 グラフデータモデルで新しい文献検索システムを開発している。
  52. 52. Neo4j User Group. Knowledge Graph 52
  53. 53. Neo4j User Group. MDM - Employee Hierarchy 53 この図は、組織の表面的な構成を表しているだけである。
  54. 54. Neo4j User Group. MDM - Hierarchies in the Real World are Actually Graphs 54 実際のコミュニケーションのフローは、とても複雑である。
  55. 55. Neo4j User Group. MDM - Employee Roles, Activities, Skills, Degrees, Teams Graph 55 グラフモデルでは、複雑な現実世界をありのままデータモデルにし、クエリが実行できる。
  56. 56. Neo4j User Group. 56 開発
  57. 57. Neo4j User Group. Cypher(サイファー) 57 ・究極的なジョイン、グラフサーチ、分析が可能なクエリ―言語である ・言語ドライバー(Bolt Driver)、C#、Java、JavaScript、Python
  58. 58. Neo4j User Group. グラフデータモデル 58 データの蓄積・探索のための雛形である これは、「Neo4jの演習データベース」 Movie [参考] https://neo4j.com/developer/guide-data-modeling/ https://neo4j.com/graphgists/
  59. 59. Neo4j User Group. どのようにデータ構成になっているのか 59 データベース データファイルが格納されているフォルダ ラベル テーブル格 ノード レコード格 リレーションシップ ★ノードとノードの関係定義するもの(グラフ固有) 属性 フィルド格のもので{ キー:バリュー}で表現 ★ノードのリレーションシップの両方に持つ
  60. 60. Neo4j User Group. 「俳優〇〇さんが、映画〇〇に出演している」ー基本的なデータ表現の単位 60 :People {name:‟Kenau Reeves‟, born:1964} :Movie {title:‟The Matrix‟, released:1999} ACTED_IN {roles:‟Neo‟} グラフ固有の定義 ノード リレーションシップ [:TYPE {key: value, key: value}) (:ラベル { key: value, key: value}) ノード
  61. 61. Neo4j User Group. これがデータベースの中身だとすると 61 テーブル格 リレーションシップの定義 レコード格
  62. 62. Neo4j User Group. 多様な表現が可能である。 例えば、()は、すべてのノードという意味になる • () • (識別子) • (:ラベル) • (識別子:ラベル) ノードの表現 62
  63. 63. Neo4j User Group. 有向グラフと無向グラフ(検索のみ)の表現が可能である。 ワイルドカードや、何ホップ以内、関係性の名称(タイプ)指定などが可能性である。 • ()-->() • ()<--() • ()--() • ()-[*]->() • ()-[*..n]->() • ()-[:タイプ]->() • ()-[:タイプ*]->() • ()-[:タイプ*..n]->() • ()-[識別子:タイプ]->() リレーションシップの表現 63
  64. 64. Neo4j User Group. キーとバリューで指定できる。 {Key:Value, Key:Value, Key:Value, …} • Number, an abstract type, which has the subtypes Integer and Float • String • Boolean • The spatial type Point • Temporal types: Date, Time, LocalTime, DateTime, LocalDateTime and Duration 属性の表現 64
  65. 65. Neo4j User Group. ノードを登録する →Web UI、CLI、APIで実行できる 65 CREATE (movie:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'}) CREATE (keanu:Person {name:'Keanu Reeves', born:1964}) 映画の登録 俳優さんの登録 CREATE (識別子:ラベル {キー:バリュー,キー:バリュー, ・・・})
  66. 66. Neo4j User Group. • CREATE (keanu)-[:ACTED_IN {roles:['Neo']}]->(movie) 関係性を登録する 66
  67. 67. Neo4j User Group. • CREATE CREATE • READ MATCH [WHERE] RETURN • UPDATE/DELETE MATCH [WHERE] SET/REMOVE UPDATE/DELETE CRUD・・・SQLライクなシンプルな構文で実行する 67 CRATE (ノード)<-[関係性 ]-(ノード) MATCH (ノード)<-[関係性 ]-(ノード) WHERE ノード.名称 = „value‟ RETURN ノード MATCH (ノード)<-[関係性 ]-(ノード) WHERE ノード.名称 = „value‟ UPDATE SET[REMOVE] ノード.名称= „value‟ [ DELETE ノード)
  68. 68. Neo4j User Group. 大量データをロードする場合(LOAD CSV) 68 LOAD CSV FROM 'file:///C:/temp/csv/artists.csv' AS line CREATE (:Artist { name: line[1], year: toInt(line[2])}) • データを読み込んでCyhper Queryに食べさせる • 既存のデータベースへ追加できる • 比較的に尐量のデータの追加・変更などに便利 • パフォーマンスが良くない
  69. 69. Neo4j User Group. 大量データをロードする場合(neo4j-import) 69 neo4j-import --into /opt/disk1/data/neo4j/graph1.db --nodes movies.csv --nodes actors.csv --relationships roles.csv • off-lineで新規データベースを作る • とても高速であり、マイグレーション、 off-lineでの分析DB作成などで使う • データはIDを付与し、グラフとしての整合性のとれた 状態であることが求められる。
  70. 70. Neo4j User Group. • JDBC Driver MySQL, PostgreSQl, Oracle, SQL Servr • 課題 差分抽出 neo4j-etl ETL(抽出→転送→ロード) 70 ETL データソース Neo4j
  71. 71. Neo4j User Group. Cyhperが難しいですか? 多様なデータモデルとCypherの例示が見られます! 71 https://neo4j.com/docs/developer-manual/3.3/cypher/ https://neo4j.com/graphgists/
  72. 72. Neo4j User Group. Cyhperが難しいですか? 思い切り、RDB的なことをやってみたらどうでしょうか 72 MATCH (y:Year {year:2014})-->(m:Month {month:9})-->(d)-->(h)-->(o)<-[:PLACED]-(u) WITH u, sum(o.number * o.price) AS total WITH CASE WHEN u.born > 1994 AND u.gender="man" THEN sum(total) END AS lt20m, CASE WHEN u.born > 1994 AND u.gender="woman" THEN sum(total) END AS lt20w, CASE WHEN u.born > 1984 AND u.born <= 1994 AND u.gender="man" THEN sum(total) END AS lt30m, CASE WHEN u.born > 1984 AND u.born <= 1994 AND u.gender="woman" THEN sum(total) END AS lt30w, CASE WHEN u.born > 1974 AND u.born <= 1984 AND u.gender="man" THEN sum(total) END AS lt40m, CASE WHEN u.born > 1974 AND u.born <= 1984 AND u.gender="woman" THEN sum(total) END AS lt40w, CASE WHEN u.born > 1964 AND u.born <= 1974 AND u.gender="man" THEN sum(total) END AS lt50m, CASE WHEN u.born > 1964 AND u.born <= 1974 AND u.gender="woman" THEN sum(total) END AS lt50w, CASE WHEN u.born > 1954 AND u.born <= 1964 AND u.gender="man" THEN sum(total) END AS lt60m, CASE WHEN u.born > 1954 AND u.born <= 1964 AND u.gender="woman" THEN sum(total) END AS lt60w, CASE WHEN u.born <= 1954 AND u.gender="man" THEN sum(total) END AS gt60m, CASE WHEN u.born <= 1954 AND u.gender="woman" THEN sum(total) END AS gt60w WITH collect(lt20m) AS lt20am, collect(lt20w) AS lt20aw, collect(lt30m) AS lt30am, collect(lt30w) AS lt30aw, collect(lt40m) AS lt40am, collect(lt40w) AS lt40aw, collect(lt50m) AS lt50am, collect(lt50w) AS lt50aw, collect(lt60m) AS lt60am, collect(lt60w) AS lt60aw, collect(gt60m) AS gt60am, collect(gt60w) AS gt60aw RETURN head(lt20am) AS 男年齢20以下, head(lt20aw) AS 女年齢20以下, head(lt30am) AS 男年齢30以下, head(lt30aw) AS 女年齢30以下, head(lt40am) AS 男年齢40以下, head(lt40aw) AS 女年齢40以下, head(lt50am) AS 男年齢50以下, head(lt50aw) AS 女年齢50以下, head(lt60am) AS 男年齢60以下, head(lt60aw) AS 女年齢60以下, head(gt60am) AS 男年齢60上, head(gt60aw) AS 女年齢60上 男年齢20以下 女年齢20以下 男年齢30以下 女年齢30以下 男年齢40以下 女年齢40以下 男年齢50以下 女年齢50以下 男年齢60以下 女年齢60以下 男年齢60上 女年齢60上 2,697,130 3,381,830 5,130,839 5,522,689 5,471,666 3,766,844 5,734,831 4,794,380 5,682,058 4,630,580 3,285,838 3,143,985 クロス集計やってみた2014年9月の年齢別男女別の売 上金額 https://www.creationline.com/lab/10192
  73. 73. Neo4j User Group. Blotドライバ―を公式サポートしている。 • .NET • Java • Python, • JavaScript https://neo4j.com/docs/developer-manual/current/drivers/ アプリケーション開発 73
  74. 74. Neo4j User Group. v3.xからグラフデータ処理モデルのアルゴリズムを実装しつつある。 https://neo4j.com/docs/graph-algorithms/3.3/procedures/ 2.xまでは全くやっていなかった。Neo4jは、汎用型のグラフデータベースである。グラフアルゴリズムに特化されている わけではない。 Neo4jの普及とともにニーズが出てきたようである。 プロシーシャーとしてインストールして使う。 https://github.com/neo4j-contrib/neo4j-graph-algorithms/releases dbms.security.procedures.unrestricted=algo.* CALL algo.list() グラフアルゴリズム 74
  75. 75. Neo4j User Group. 様々な規定を機能がインストールするだけで簡単に使える(300近いの機能)。 • APOC(A Package Of Componen) https://neo4j-contrib.github.io/neo4j-apoc-procedures/index33.html • 例えば、foo@bar.comからドメインだけを切り出すとか サードパーティーのプロシージャー 75 WITH 'foo@bar.com' AS email RETURN apoc.data.domain(email) as value // will return 'bar.com'< value "bar.com"
  76. 76. Neo4j User Group. Neo4j Desktop 76 統合開発環境であり、Neo4j EEをローカル環境で使える(無償)
  77. 77. Neo4j User Group. Neo4j Desktop-Bloom 77 コードレスの探索、 ストーリーボード設計でCypherが書けないユーザによるグラフ分析を実現
  78. 78. Neo4j User Group. 可視化では、以下のような選択も • D3.js https://d3js.org/ • GraphViz http://www.graphviz.org/ • Cytoscape http://www.cytoscape.org/ • LINKURIOUS (Sigma.js) https://linkurio.us/ • KeyLines https://cambridge-intelligence.com/keylines/ サードパーティの可視化ライブラリ 78
  79. 79. Neo4j User Group. 79 運用
  80. 80. Neo4j User Group. 高可用性 (EEのみ) 80 • マスターのデータを複数のスレーブにレプリケーション • スレーブから読み込みできるが、本来は負荷分散が目的ではない • Neo4jは、クエリをどのノードに投げてもMasterに伝播される
  81. 81. Neo4j User Group. 高可用性+性能拡張(Causal cluster, EEのみ) 81 • コアは、HA構成になっている • コアからリードレプリカを拡張する(読み取り負荷分散) マルチデータセンター サポートも(新機能)
  82. 82. Neo4j User Group. 増分バックアップを実行し、障害直前の状態をリストアできる。ただし、バックアップは、最後のスナップショットであり、ポ イントインタイムリカバリはできない。 • フールバックアップ bin/neo4j-admin backup --backup-dir=/mnt/neo4j-backup --name=graph.db-backup -- pagecache=2G • インクリメンタルバックバックアップ(フールバックアップ先にオプション付けで実行する) bin/neo4j-admin backup --backup-dir=/mnt/neo4j-backup --name=graph.db-backup -- fallback-to-full=true --check-consistency=true --pagecache=2G • リストア bin/neo4j stop bin/neo4j-admin restore --from=/mnt/backup/graph.db-backup --database=graph.db -- force ホットバックアップ(EEのみ) 82
  83. 83. Neo4j User Group. • 認証/認可 adminの他、ユーザ作成可能であり、IDとパスワードで管理 ユーザ毎にデータベースへの特権を与える(ロールベースの権限管理) • 実行プロシーシャー制限可能 dbms.security.procedures.whitelist=apoc.coll.*,apoc.load.* • SSLフレームワークの標準実装 セキュリティ 83
  84. 84. Neo4j User Group. v3.xに入ってから、監視機能が大幅に強化されている。 • メトリック(EEのみ) 様々なメトリックを提供しており、例えば、遅延クエリが監視できる。 dbms.logs.query.enabled=true(defaultはfalse) dbms.logs.query.threshold=<xx秒(ms、又はミリ秒(s) defaultは 0(すべて出力)> • ロギング(EEのみ) ロギングの設定によっては、クエリ実行時間の詳細までが取れる。 ex) 2017-11-22 12:38 ... INFO 78 ms: (planning: 40, cpu: 74, waiting: 0) - 6347592 B - 0 page hits, 0 page faults ... • クエリマネジメント 遅延トランザクション処理のタイムアウト時間を設定きるう。 • 大規模分散処理の監視 監視 84
  85. 85. Neo4j User Group. 実は、グラフ問題に苦労していませんか • AI&Machine Learning • Fraud Detection • Indetity and Access • Knlowledge Graph • Master Data Management • Network and IT Operations • Privacy, Risk and Compliance • Recommendation Engine • Social Networks 85
  86. 86. Neo4j User Group. Q:Neo4jのリソースサイジングをどうしたらいいですか A:次のURLを参照してください。 [データサイズを積算] https://neo4j.com/developer/guide-sizing-and-hardware-calculator/#_neo4j_s_architecture [リソースを計算] https://neo4j.com/hardware-sizing/ https://neo4j.com/developer/guide-performance-tuning/ Q:読み取り一貫性が保障されますか。 A:常に、クエリを投げて時点での整合性の取れたデータが読み取れます。Neo4jは、データの一貫性を保障するた めにACIDモデルを使用し、常に一貫性のある書き込みを行っていますから。 https://neo4j.com/blog/acid-vs-base-consistency-models-explained/ QA集め 86
  87. 87. Neo4j User Group. Q:Neo4jのトランザクション処理は A:トランザクション処理を開始した時点から複数行の更新が実行できます。 すべて成功しなければ、ロックバックします。 COMMITするまでは、HEAPメモリに保持し、COMMITすると、永続化される。 https://neo4j.com/docs/developer-manual/current/cypher/introduction/transactions/ https://neo4j.com/docs/developer-manual/current/http-api/#http-api-transactional 87
  88. 88. Neo4j User Group. Thanks 88

×