SlideShare a Scribd company logo
1 of 23
Download to read offline
軽く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

マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜Yoshiki Nakagawa
 
オーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiAオーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiAOre Product
 
Iocコンテナについて
IocコンテナについてIocコンテナについて
IocコンテナについてAkio Terayama
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2ozuma5119
 
ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版Tokoroten Nakayama
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴Takuto Wada
 
グラフ構造のデータモデルをPower BIで可視化してみた
グラフ構造のデータモデルをPower BIで可視化してみたグラフ構造のデータモデルをPower BIで可視化してみた
グラフ構造のデータモデルをPower BIで可視化してみたCData Software Japan
 
ROS2のリアルタイム化に挑む WG初参加
ROS2のリアルタイム化に挑む WG初参加ROS2のリアルタイム化に挑む WG初参加
ROS2のリアルタイム化に挑む WG初参加Atsushi Hasegawa
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
名は体を表していますか
名は体を表していますか名は体を表していますか
名は体を表していますかinfinite_loop
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫Koichiro Matsuoka
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
勝てる「開発プロセス」のつくり方
勝てる「開発プロセス」のつくり方勝てる「開発プロセス」のつくり方
勝てる「開発プロセス」のつくり方Hiromasa Oka
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRecruit Technologies
 

What's hot (20)

マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
 
オーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiAオーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiA
 
Iocコンテナについて
IocコンテナについてIocコンテナについて
Iocコンテナについて
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2
 
ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
 
グラフ構造のデータモデルをPower BIで可視化してみた
グラフ構造のデータモデルをPower BIで可視化してみたグラフ構造のデータモデルをPower BIで可視化してみた
グラフ構造のデータモデルをPower BIで可視化してみた
 
ROS2のリアルタイム化に挑む WG初参加
ROS2のリアルタイム化に挑む WG初参加ROS2のリアルタイム化に挑む WG初参加
ROS2のリアルタイム化に挑む WG初参加
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
名は体を表していますか
名は体を表していますか名は体を表していますか
名は体を表していますか
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
Serverless時代のJavaについて
Serverless時代のJavaについてServerless時代のJavaについて
Serverless時代のJavaについて
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
勝てる「開発プロセス」のつくり方
勝てる「開発プロセス」のつくり方勝てる「開発プロセス」のつくり方
勝てる「開発プロセス」のつくり方
 
データ分析概略
データ分析概略データ分析概略
データ分析概略
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
 

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年度若手技術者向け講座 実践SQLkeki3
 
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz実務者のためのかんたんScalaz
実務者のためのかんたんScalazTomoharu ASAMI
 
SSII2020TS: 機械学習モデルの判断根拠の説明​ 〜 Explainable AI 研究の近年の展開 〜​
SSII2020TS: 機械学習モデルの判断根拠の説明​ 〜 Explainable AI 研究の近年の展開 〜​SSII2020TS: 機械学習モデルの判断根拠の説明​ 〜 Explainable AI 研究の近年の展開 〜​
SSII2020TS: 機械学習モデルの判断根拠の説明​ 〜 Explainable AI 研究の近年の展開 〜​SSII
 
kagamicomput201706
kagamicomput201706kagamicomput201706
kagamicomput201706swkagami
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】Tomoharu ASAMI
 
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_データ入出力編2016wada, kazumi
 
おしゃスタ@リクルート
おしゃスタ@リクルートおしゃスタ@リクルート
おしゃスタ@リクルートIssei Kurahashi
 
データ分析におけるPower BIの活用.pptx
データ分析におけるPower BIの活用.pptxデータ分析におけるPower BIの活用.pptx
データ分析におけるPower BIの活用.pptxWeigangShang
 
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 Lakede: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

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Recently uploaded (8)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

軽く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