SlideShare a Scribd company logo
軽くRDB再入門
と
Graph DB 入門
RDB 再入門 (1)
2018/06/28
• Relational Databaseの基礎論文は
1968年(?) E.F.コッド「大容量データバ
ンクのための関係モデル」
• コッドの関係型データモデルは,数学的
「関係」の概念に基づいたデータモデル。
• 関係を数学的に定義すると集合 A と
集合 B の直積集合 A × B の任意の
部分集合を A から B への関係 とい
う。
• A から Aへの関係を単に A 上の関係
という。
• 主目的はループをなくしたかった
※図はwikiの直積集合より
RDB 再入門 (2)
2018/06/28
• データベースに含まれるべきすべてのデータを複数個の表形式で表現し,
これらの表を「関係」と見なすことにより,データベースを集合論的に定
式化したもの
• 関係については種々の演算が定義されており,このような演算の系は「関
係代数(Relational Algebra)」と呼ばれている。
• 選択(SELECT), 射影(PROJECT), 結合(JOIN)など
• 歴史
• 1974 SEQUEL言語の開発 (後にSQLと改名)
• 1979 Oracle V2
• 1981 Informix
• 1986 Sybase
• 1989 MS SQL Server
• 1995 MySQL
RDB 再入門 (3) 正規化
2018/06/28
注文# 店舗# 店舗 注文日 合計金額 消費税 商品1
商品1
数量
商品1
単価
商品2
商品2
数量
商品2
単価
商品3
商品3
数量
商品3
単価
1022 0001 半蔵門 20180618 2400 192 寿司 1 2000 ビール 2 100 水 1 200
4123 0004 大手町 20180618 200 16 水 1 200
非正規形
• 正規化されておらず繰返し項目などが存在する様な状態
じょうちょう
【冗⾧】
《名・ダナ》述べ方が⾧たらしく、むだのあること。
「―をきらって簡潔に書く」
第1正規形
2018/06/28
• 関係がスカラ値のみを持ちうる
• スカラ値:それ以上分割できない値、表や配列、カンマで区切った文字列な
どはふつうスカラ値ではない
• 各テーブルで繰り返し現れるグループを除去します。
注文# 店舗# 店舗 注文日 合計金額 消費税 商品# 商品 数量 単価
1022 0001 半蔵門 20180618 2400 192 9001 寿司 1 2000
1022 0001 半蔵門 20180618 2400 192 9002 ビール 2 100
1022 0001 半蔵門 20180618 2400 192 9003 水 1 200
4123 0004 大手町 20180618 200 16 9003 水 1 200
第2正規形
2018/06/28
• ある関係が、第1正規形で、かつ、すべての非キー属性が、す
べての候補キーに対して完全従属
• つまり、第2正規形では、候補キーの一部に関数従属する非キー属性が
あってはならない。
• 「AがBに関数従属する」とは、Bの値を決めると、常にAの値が一つに
定まるような性質をAが有する(B → Aと書く)
• 複数のレコードに該当する値のセットごとに 1 つのテーブルを作成し
ます。
注文# 店舗# 店舗 注文日 合計金額 消費税
1022 0001 半蔵門 20180618 2400 192
4123 0004 大手町 20180618 200 16
注文# 商品# 数量
1022 9001 1
1022 9002 2
1022 9003 1
4123 9003 1
商品# 名前 単価
9001 寿司 2000
9002 ビール 100
9003 水 200
第3正規形
2018/06/28
• ある関係が、第2正規形で、かつ、非キー属性があるならば、
それら全てが候補キーに非推移的に関数従属するとき
• A → BかつB → Cのとき、Cは候補キーAに推移的に関数従属するとい
う。
• 非推移的に従属するとは、関数従属するが推移的に関数従属していな
いことをいう。
• キーに従属しないフィールドを除去します。
注文# 店舗# 注文日 合計金額 消費税
1022 0001 20180618 2400 192
4123 0004 20180618 200 16
注文# 商品# 数量
1022 9001 1
1022 9002 2
1022 9003 1
4123 9003 1
商品# 名前 単価
9001 寿司 2000
9002 ビール 100
9003 水 200
店舗# 店舗
0001 半蔵門
0004 大手町
住所 電話番号
一番町 03-xxxx-xxxx
1丁目 03-9999-9999
Graph Database
2018/06/28
• 基礎理論は 1960年代のネットワーク型
データベース(のはず)
• グラフ理論ベース(主に有向グラフ)
• 大雑把に頂点、辺、プロパティで構成す
るイメージ
• トラバーサル!
• Graph QLとか相性良さそう!(個人の感
想)
• 適当な(偏った) 製品紹介
• 2007 Neo4j
• 2010 CosmosDB
• 2018/05/30 AWS Neptune (GA)
頂点 辺
いらすとやより
適用事例
2018/06/28
• 経路問題系
• 配送業務系
• ネットワーク管理系
• サジェスト(Recommend Engine)
• AWS Neptuneページでは推奨エンジンとして表現
• 不正検知(送金処理など)
• 分析系(パナマ文書)
製品の違いなど
2018/06/28
製品 Query言語
Neo4j Cypher, Gremlin
Azure Cosmos DB Gremlin
AWS Neptune RDF/SPARQL, Gremlin
頂点 辺
• Cypher の場合、頂点をnode, 辺を relationship 等と表現
• Gremlin の場合、頂点を Vertex, Vertices(複), 辺を Edge と表現
outE = 外向きの辺
inV = 内向き辺の到達する頂点
Cypher
2018/06/28
• CREATE/DELETE :node、relationshipの登録、削除
• SET/REMOVE : 属性の更新、削除
• MATCH:データパターン問い合わせ
• WHERE: MATCHに対する条件文、フィルター
• RETURN:返す値
• 例
MATCH (tom:Person)-[:ACTED_IN]->(movie1)<-[:ACTED_IN]-(coActor:Person),
(coActor)-[:ACTED_IN]->(movie2)<-[:ACTED_IN]-(coCoActor:Person)
WHERE tom.name = "Tom Hanks"
AND NOT (tom)-[:ACTED_IN]->(movie2)
RETURN coCoActor.name
Recommend Engine
2018/06/28
Apache Tinkerpop Gremlin
2018/06/28
• graph traversal language
• 頂点をV:Vertex, Vertices(複)、辺をE:Edge と表現
(例 outE:外向きの辺、 addV:頂点の追加)
• グラフに “Thomas” 頂点を挿入 Gremlinコンソール
:> g.addV('person').property('id', 'thomas.1').property('firstName','Thomas’)
.property('lastName', 'Andersen').property('age', 44)
• “Thomas の友人が使用しているオペレーティング システムは何か” Gremlinコンソール
:> g.V('thomas.1').out('knows').out('uses').out('runsos').group().by('name').by(count())
• “Thomas の ”友人の友人“ をすべて検索” トラバーサル C#/CosmosDB
g.V('thomas.1').outE('knows').inV().hasLabel('person').outE('knows').inV().hasLabel('person
')
From Relational Model
2018/06/28
Neo4J graph db vs rdbms より
to Graph Model
2018/06/28
Neo4J graph db vs rdbms より
RDB でのm:n表現
2018/06/28
PersonsId DepartmentId
815 111
815 119
815 181
…
id name
815 Alice
…
Persons
id name
111 4FUTURE
119 P0815
181 A42
…
Dept_Members
Department
Query
2018/06/28
Neo4J graph db vs rdbms より
• SQL
SELECT name FROM Person
LEFT JOIN Person_Department
ON Person.Id = Person_Department.PersonId
LEFT JOIN Department
ON Department.Id = Person_Department.DepartmentId
WHERE Department.name = "IT Department"
Query
2018/06/28
• Cypher
MATCH (p:Person)<-[:BELONGS_TO]-(d:Department)
WHERE d.name = "IT Department"
RETURN p.name
• Gremlin (自信ない)
g.V().hasLabel(‘Department’).has(‘name’, ‘IT Department’)
.out().values(‘name’)
• SPARQL
わかりません!
select ?s ?p ?o where {?s ?p ?o} limit 10
Cosmos DB (GraphSON)
2018/06/28
{
"id": "a7111ba7-0ea1-43c9-b6b2-efc5e3aea4c0",
"label": "person",
"type": "vertex",
"outE": {
"knows": [
{
"id": "3ee53a60-c561-4c5e-9a9f-9c7924bc9aef",
"inV": "04779300-1c8e-489d-9493-50fd1325a658"
},
{
"id": "21984248-ee9e-43a8-a7f6-30642bc14609",
"inV": "a8e3e741-2ef7-4c01-b7c8-199f8e43e3bc"
}
]
},
"properties": {
"firstName": [
{
"value": "Thomas"
}
],
"lastName": [
{
"value": "Andersen"
}
],
"age": [
{
"value": 45
}
]
}
}
Graph processing with SQLServer2017
2018/06/28
CREATE TABLE Person (ID INTEGER PRIMARY KEY, Name
VARCHAR(100), Age INT) AS NODE;
CREATE TABLE friends (StartDate date) AS EDGE;
SQL Server と Azure SQL Database を使用した処理グラフより
Query
2018/06/28
SQL Server と Azure SQL Database を使用した処理グラフより
-- Find friends of John
SELECT Person2.Name
FROM Person Person1, Friends, Person Person2
WHERE MATCH(Person1-(Friends)->Person2)
AND Person1.Name = 'John’;
※MATCHパターンで NOT や OR はサポートされていません。
ので Recommend クエリ等は Cypher に比べて少し複雑になり
ます。
クソデカため息
2018/06/28
クエリ言語 頂点 辺
Cypher node relationship
Gremlin vertex edge
SQLServer(T-SQL) node edge
おしまい
2018/06/28
引用・参考
• データベースの理論とその発展
• (論文) A Relational Model of Data for Large Shared Data Banks
• (英wiki) Graph database
• (MS) Azure Cosmos DB の概要: Graph API
• (wiki) 関係の正規化
• (MS) データベースの正規化の基礎
• (Neo4j) From Relational to Neo4j
• (AWS) Amazon Neptune
• (MS) SQL Server と Azure SQL Database を使用した処理グラフ
• (MS) Graph extensions in Microsoft SQL Server 2017 and Azure
SQL Database
• (MS) MATCH (Transact-SQL)
• (MS) SQL Graph のアーキテクチャ
• (wiki) パナマ文書
• 「パナマ文書」解析の技術的側面
• Analyzing the Panama Papers with Neo4j: Data Models, Queries &
More

More Related Content

What's hot

ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
sairoutine
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
Mikiya Okuno
 
Hadoopのシステム設計・運用のポイント
Hadoopのシステム設計・運用のポイントHadoopのシステム設計・運用のポイント
Hadoopのシステム設計・運用のポイント
Cloudera Japan
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito
 
異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j
昌桓 李
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
NTT DATA Technology & Innovation
 
Redis勉強会資料(2015/06 update)
Redis勉強会資料(2015/06 update)Redis勉強会資料(2015/06 update)
Redis勉強会資料(2015/06 update)
Yuji Otani
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
NTT DATA OSS Professional Services
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能
TomomitsuKusaba
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
増田 亨
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
 
JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
NTT DATA Technology & Innovation
 
今から始める Lens/Prism
今から始める Lens/Prism今から始める Lens/Prism
今から始める Lens/Prism
Naoki Aoyama
 
Apache Drill を利用した実データの分析
Apache Drill を利用した実データの分析Apache Drill を利用した実データの分析
Apache Drill を利用した実データの分析
MapR Technologies Japan
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
Ken'ichi Matsui
 

What's hot (20)

ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 
Hadoopのシステム設計・運用のポイント
Hadoopのシステム設計・運用のポイントHadoopのシステム設計・運用のポイント
Hadoopのシステム設計・運用のポイント
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
 
Redis勉強会資料(2015/06 update)
Redis勉強会資料(2015/06 update)Redis勉強会資料(2015/06 update)
Redis勉強会資料(2015/06 update)
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
 
今から始める Lens/Prism
今から始める Lens/Prism今から始める Lens/Prism
今から始める Lens/Prism
 
Apache Drill を利用した実データの分析
Apache Drill を利用した実データの分析Apache Drill を利用した実データの分析
Apache Drill を利用した実データの分析
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
 

Similar to 軽くRDB再入門とGraph DB 入門

Spring Data in a Nutshell
Spring Data in a NutshellSpring Data in a Nutshell
Spring Data in a NutshellTsuyoshi Miyake
 
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
Satoshi Nagayasu
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックスTomoharu ASAMI
 
2019年度若手技術者向け講座 実践SQL
2019年度若手技術者向け講座 実践SQL2019年度若手技術者向け講座 実践SQL
2019年度若手技術者向け講座 実践SQL
keki3
 
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz実務者のためのかんたんScalaz
実務者のためのかんたんScalaz
Tomoharu ASAMI
 
SSII2020TS: 機械学習モデルの判断根拠の説明​ 〜 Explainable AI 研究の近年の展開 〜​
SSII2020TS: 機械学習モデルの判断根拠の説明​ 〜 Explainable AI 研究の近年の展開 〜​SSII2020TS: 機械学習モデルの判断根拠の説明​ 〜 Explainable AI 研究の近年の展開 〜​
SSII2020TS: 機械学習モデルの判断根拠の説明​ 〜 Explainable AI 研究の近年の展開 〜​
SSII
 
kagamicomput201706
kagamicomput201706kagamicomput201706
kagamicomput201706
swkagami
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
Tomoharu ASAMI
 
20170218 list format4bi
20170218 list format4bi20170218 list format4bi
20170218 list format4bi
Tomoko Hagiwara
 
D3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーションD3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーション
Kohei Kadowaki
 
簡単!AWRをEXCELピボットグラフで分析しよう♪
簡単!AWRをEXCELピボットグラフで分析しよう♪簡単!AWRをEXCELピボットグラフで分析しよう♪
簡単!AWRをEXCELピボットグラフで分析しよう♪
Yohei Azekatsu
 
統計環境R_データ入出力編2016
統計環境R_データ入出力編2016統計環境R_データ入出力編2016
統計環境R_データ入出力編2016
wada, kazumi
 
おしゃスタ@リクルート
おしゃスタ@リクルートおしゃスタ@リクルート
おしゃスタ@リクルートIssei Kurahashi
 
データ分析におけるPower BIの活用.pptx
データ分析におけるPower BIの活用.pptxデータ分析におけるPower BIの活用.pptx
データ分析におけるPower BIの活用.pptx
WeigangShang
 
Sql server 2017 からはじめる graph データベース
Sql server 2017 からはじめる graph データベースSql server 2017 からはじめる graph データベース
Sql server 2017 からはじめる graph データベース
Oda Shinsuke
 
YOU は何して VLDB2020 Tokyo へ? (グラフ編)
YOU は何して VLDB2020 Tokyo へ? (グラフ編)YOU は何して VLDB2020 Tokyo へ? (グラフ編)
YOU は何して VLDB2020 Tokyo へ? (グラフ編)
Junya Arai
 
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [概要編]
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [概要編]【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [概要編]
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [概要編]
Hideo Takagi
 
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
de:code 2017
 
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜Takahiro Inoue
 

Similar to 軽くRDB再入門とGraph DB 入門 (20)

Spring Data in a Nutshell
Spring Data in a NutshellSpring Data in a Nutshell
Spring Data in a Nutshell
 
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
 
2019年度若手技術者向け講座 実践SQL
2019年度若手技術者向け講座 実践SQL2019年度若手技術者向け講座 実践SQL
2019年度若手技術者向け講座 実践SQL
 
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz実務者のためのかんたんScalaz
実務者のためのかんたんScalaz
 
SSII2020TS: 機械学習モデルの判断根拠の説明​ 〜 Explainable AI 研究の近年の展開 〜​
SSII2020TS: 機械学習モデルの判断根拠の説明​ 〜 Explainable AI 研究の近年の展開 〜​SSII2020TS: 機械学習モデルの判断根拠の説明​ 〜 Explainable AI 研究の近年の展開 〜​
SSII2020TS: 機械学習モデルの判断根拠の説明​ 〜 Explainable AI 研究の近年の展開 〜​
 
kagamicomput201706
kagamicomput201706kagamicomput201706
kagamicomput201706
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
 
20170218 list format4bi
20170218 list format4bi20170218 list format4bi
20170218 list format4bi
 
D3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーションD3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーション
 
簡単!AWRをEXCELピボットグラフで分析しよう♪
簡単!AWRをEXCELピボットグラフで分析しよう♪簡単!AWRをEXCELピボットグラフで分析しよう♪
簡単!AWRをEXCELピボットグラフで分析しよう♪
 
統計環境R_データ入出力編2016
統計環境R_データ入出力編2016統計環境R_データ入出力編2016
統計環境R_データ入出力編2016
 
おしゃスタ@リクルート
おしゃスタ@リクルートおしゃスタ@リクルート
おしゃスタ@リクルート
 
データ分析におけるPower BIの活用.pptx
データ分析におけるPower BIの活用.pptxデータ分析におけるPower BIの活用.pptx
データ分析におけるPower BIの活用.pptx
 
Sql server 2017 からはじめる graph データベース
Sql server 2017 からはじめる graph データベースSql server 2017 からはじめる graph データベース
Sql server 2017 からはじめる graph データベース
 
YOU は何して VLDB2020 Tokyo へ? (グラフ編)
YOU は何して VLDB2020 Tokyo へ? (グラフ編)YOU は何して VLDB2020 Tokyo へ? (グラフ編)
YOU は何して VLDB2020 Tokyo へ? (グラフ編)
 
CSS3 Design Recipe
CSS3 Design RecipeCSS3 Design Recipe
CSS3 Design Recipe
 
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [概要編]
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [概要編]【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [概要編]
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [概要編]
 
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
 
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
 

Recently uploaded

FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 

Recently uploaded (16)

FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 

軽くRDB再入門とGraph DB 入門

  • 2. RDB 再入門 (1) 2018/06/28 • Relational Databaseの基礎論文は 1968年(?) E.F.コッド「大容量データバ ンクのための関係モデル」 • コッドの関係型データモデルは,数学的 「関係」の概念に基づいたデータモデル。 • 関係を数学的に定義すると集合 A と 集合 B の直積集合 A × B の任意の 部分集合を A から B への関係 とい う。 • A から Aへの関係を単に A 上の関係 という。 • 主目的はループをなくしたかった ※図はwikiの直積集合より
  • 3. RDB 再入門 (2) 2018/06/28 • データベースに含まれるべきすべてのデータを複数個の表形式で表現し, これらの表を「関係」と見なすことにより,データベースを集合論的に定 式化したもの • 関係については種々の演算が定義されており,このような演算の系は「関 係代数(Relational Algebra)」と呼ばれている。 • 選択(SELECT), 射影(PROJECT), 結合(JOIN)など • 歴史 • 1974 SEQUEL言語の開発 (後にSQLと改名) • 1979 Oracle V2 • 1981 Informix • 1986 Sybase • 1989 MS SQL Server • 1995 MySQL
  • 4. RDB 再入門 (3) 正規化 2018/06/28 注文# 店舗# 店舗 注文日 合計金額 消費税 商品1 商品1 数量 商品1 単価 商品2 商品2 数量 商品2 単価 商品3 商品3 数量 商品3 単価 1022 0001 半蔵門 20180618 2400 192 寿司 1 2000 ビール 2 100 水 1 200 4123 0004 大手町 20180618 200 16 水 1 200 非正規形 • 正規化されておらず繰返し項目などが存在する様な状態 じょうちょう 【冗⾧】 《名・ダナ》述べ方が⾧たらしく、むだのあること。 「―をきらって簡潔に書く」
  • 5. 第1正規形 2018/06/28 • 関係がスカラ値のみを持ちうる • スカラ値:それ以上分割できない値、表や配列、カンマで区切った文字列な どはふつうスカラ値ではない • 各テーブルで繰り返し現れるグループを除去します。 注文# 店舗# 店舗 注文日 合計金額 消費税 商品# 商品 数量 単価 1022 0001 半蔵門 20180618 2400 192 9001 寿司 1 2000 1022 0001 半蔵門 20180618 2400 192 9002 ビール 2 100 1022 0001 半蔵門 20180618 2400 192 9003 水 1 200 4123 0004 大手町 20180618 200 16 9003 水 1 200
  • 6. 第2正規形 2018/06/28 • ある関係が、第1正規形で、かつ、すべての非キー属性が、す べての候補キーに対して完全従属 • つまり、第2正規形では、候補キーの一部に関数従属する非キー属性が あってはならない。 • 「AがBに関数従属する」とは、Bの値を決めると、常にAの値が一つに 定まるような性質をAが有する(B → Aと書く) • 複数のレコードに該当する値のセットごとに 1 つのテーブルを作成し ます。 注文# 店舗# 店舗 注文日 合計金額 消費税 1022 0001 半蔵門 20180618 2400 192 4123 0004 大手町 20180618 200 16 注文# 商品# 数量 1022 9001 1 1022 9002 2 1022 9003 1 4123 9003 1 商品# 名前 単価 9001 寿司 2000 9002 ビール 100 9003 水 200
  • 7. 第3正規形 2018/06/28 • ある関係が、第2正規形で、かつ、非キー属性があるならば、 それら全てが候補キーに非推移的に関数従属するとき • A → BかつB → Cのとき、Cは候補キーAに推移的に関数従属するとい う。 • 非推移的に従属するとは、関数従属するが推移的に関数従属していな いことをいう。 • キーに従属しないフィールドを除去します。 注文# 店舗# 注文日 合計金額 消費税 1022 0001 20180618 2400 192 4123 0004 20180618 200 16 注文# 商品# 数量 1022 9001 1 1022 9002 2 1022 9003 1 4123 9003 1 商品# 名前 単価 9001 寿司 2000 9002 ビール 100 9003 水 200 店舗# 店舗 0001 半蔵門 0004 大手町 住所 電話番号 一番町 03-xxxx-xxxx 1丁目 03-9999-9999
  • 8. Graph Database 2018/06/28 • 基礎理論は 1960年代のネットワーク型 データベース(のはず) • グラフ理論ベース(主に有向グラフ) • 大雑把に頂点、辺、プロパティで構成す るイメージ • トラバーサル! • Graph QLとか相性良さそう!(個人の感 想) • 適当な(偏った) 製品紹介 • 2007 Neo4j • 2010 CosmosDB • 2018/05/30 AWS Neptune (GA) 頂点 辺 いらすとやより
  • 9. 適用事例 2018/06/28 • 経路問題系 • 配送業務系 • ネットワーク管理系 • サジェスト(Recommend Engine) • AWS Neptuneページでは推奨エンジンとして表現 • 不正検知(送金処理など) • 分析系(パナマ文書)
  • 10. 製品の違いなど 2018/06/28 製品 Query言語 Neo4j Cypher, Gremlin Azure Cosmos DB Gremlin AWS Neptune RDF/SPARQL, Gremlin 頂点 辺 • Cypher の場合、頂点をnode, 辺を relationship 等と表現 • Gremlin の場合、頂点を Vertex, Vertices(複), 辺を Edge と表現 outE = 外向きの辺 inV = 内向き辺の到達する頂点
  • 11. Cypher 2018/06/28 • CREATE/DELETE :node、relationshipの登録、削除 • SET/REMOVE : 属性の更新、削除 • MATCH:データパターン問い合わせ • WHERE: MATCHに対する条件文、フィルター • RETURN:返す値 • 例 MATCH (tom:Person)-[:ACTED_IN]->(movie1)<-[:ACTED_IN]-(coActor:Person), (coActor)-[:ACTED_IN]->(movie2)<-[:ACTED_IN]-(coCoActor:Person) WHERE tom.name = "Tom Hanks" AND NOT (tom)-[:ACTED_IN]->(movie2) RETURN coCoActor.name
  • 13. Apache Tinkerpop Gremlin 2018/06/28 • graph traversal language • 頂点をV:Vertex, Vertices(複)、辺をE:Edge と表現 (例 outE:外向きの辺、 addV:頂点の追加) • グラフに “Thomas” 頂点を挿入 Gremlinコンソール :> g.addV('person').property('id', 'thomas.1').property('firstName','Thomas’) .property('lastName', 'Andersen').property('age', 44) • “Thomas の友人が使用しているオペレーティング システムは何か” Gremlinコンソール :> g.V('thomas.1').out('knows').out('uses').out('runsos').group().by('name').by(count()) • “Thomas の ”友人の友人“ をすべて検索” トラバーサル C#/CosmosDB g.V('thomas.1').outE('knows').inV().hasLabel('person').outE('knows').inV().hasLabel('person ')
  • 14. From Relational Model 2018/06/28 Neo4J graph db vs rdbms より
  • 15. to Graph Model 2018/06/28 Neo4J graph db vs rdbms より
  • 16. RDB でのm:n表現 2018/06/28 PersonsId DepartmentId 815 111 815 119 815 181 … id name 815 Alice … Persons id name 111 4FUTURE 119 P0815 181 A42 … Dept_Members Department
  • 17. Query 2018/06/28 Neo4J graph db vs rdbms より • SQL SELECT name FROM Person LEFT JOIN Person_Department ON Person.Id = Person_Department.PersonId LEFT JOIN Department ON Department.Id = Person_Department.DepartmentId WHERE Department.name = "IT Department"
  • 18. Query 2018/06/28 • Cypher MATCH (p:Person)<-[:BELONGS_TO]-(d:Department) WHERE d.name = "IT Department" RETURN p.name • Gremlin (自信ない) g.V().hasLabel(‘Department’).has(‘name’, ‘IT Department’) .out().values(‘name’) • SPARQL わかりません! select ?s ?p ?o where {?s ?p ?o} limit 10
  • 19. Cosmos DB (GraphSON) 2018/06/28 { "id": "a7111ba7-0ea1-43c9-b6b2-efc5e3aea4c0", "label": "person", "type": "vertex", "outE": { "knows": [ { "id": "3ee53a60-c561-4c5e-9a9f-9c7924bc9aef", "inV": "04779300-1c8e-489d-9493-50fd1325a658" }, { "id": "21984248-ee9e-43a8-a7f6-30642bc14609", "inV": "a8e3e741-2ef7-4c01-b7c8-199f8e43e3bc" } ] }, "properties": { "firstName": [ { "value": "Thomas" } ], "lastName": [ { "value": "Andersen" } ], "age": [ { "value": 45 } ] } }
  • 20. Graph processing with SQLServer2017 2018/06/28 CREATE TABLE Person (ID INTEGER PRIMARY KEY, Name VARCHAR(100), Age INT) AS NODE; CREATE TABLE friends (StartDate date) AS EDGE; SQL Server と Azure SQL Database を使用した処理グラフより
  • 21. Query 2018/06/28 SQL Server と Azure SQL Database を使用した処理グラフより -- Find friends of John SELECT Person2.Name FROM Person Person1, Friends, Person Person2 WHERE MATCH(Person1-(Friends)->Person2) AND Person1.Name = 'John’; ※MATCHパターンで NOT や OR はサポートされていません。 ので Recommend クエリ等は Cypher に比べて少し複雑になり ます。
  • 22. クソデカため息 2018/06/28 クエリ言語 頂点 辺 Cypher node relationship Gremlin vertex edge SQLServer(T-SQL) node edge
  • 23. おしまい 2018/06/28 引用・参考 • データベースの理論とその発展 • (論文) A Relational Model of Data for Large Shared Data Banks • (英wiki) Graph database • (MS) Azure Cosmos DB の概要: Graph API • (wiki) 関係の正規化 • (MS) データベースの正規化の基礎 • (Neo4j) From Relational to Neo4j • (AWS) Amazon Neptune • (MS) SQL Server と Azure SQL Database を使用した処理グラフ • (MS) Graph extensions in Microsoft SQL Server 2017 and Azure SQL Database • (MS) MATCH (Transact-SQL) • (MS) SQL Graph のアーキテクチャ • (wiki) パナマ文書 • 「パナマ文書」解析の技術的側面 • Analyzing the Panama Papers with Neo4j: Data Models, Queries & More