SlideShare a Scribd company logo
1 of 22
Download to read offline
Neo4j-FDW
ぬこ@横浜 (@nuko_yokohama)
FDW とは
PostgreSQL には
Foreign Data Wrapper という
外部情報源を仮想テーブル化する
ステキ開発フレームワークがある。
( Oracle, MySQL, Redis, MongoDB,
CouchDB, Twitter, etc… )
光あるところに影がある
まこと栄光の影に数知れぬ
FDW の姿があった
命をかけて使われぬ FDW を
つくった暇人たち
今日のお題
Neo4j FDW 試作
ちょっと前に
Neo4j という
グラフデータベースを
触る機会があった。
What's Neo4j ?
オープンソースのグラフデータベース
「ノード」と「エッジ」を操作
ビジュアルな管理コンソール
Java-API/REST-API による操作
Cypher という問合わせ言語
見てもらうほうが
早いと思うので
Neo4j のデモ
Cypher クエリを
一定の規則で書くと
RDBMS の ResultSet
っぽい結果が返る
Cypher を利用して
PostgreSQL から SQL 経由で
Neo4j を検索する
FDW を作ってみた
neo4j_fdw
Neo4j Server
Neo4j Foriegn Data Wrapper
PostgreSQL
Relational Model
Cypher
Query
JSON
Result
SQL
PostgreSQL
Record
Defined Cypher Query
Execute Cypher Query on REST
Generate PostgreSQL Record
Neo4j-FDW
Concept
Provide Cypher result View.
Graph Model
olumn1 column2 column3
・・・ ・・・ ・・・
・・・・ ・・・・ ・・・
実はかなり
手抜きな FDW です
条件 pushdown は
早々に諦めた。
Cypher の場合、 WHERE 句 pushdown は
性能上はあまり効果的でない(建前)
面倒(本音)
neo4j_fdw の実装
以下、各関数の簡単な実装方針の説明
BeginForeignScan
CREATE SERVER に記述した
接続情報で Neo4j に接続し
CREATE FOREIGN TABLE に記述した
Cypher を REST-API 経由で実行
Cypher 実行結果( JSON) から
ResultSet を生成
IterateForeignScan
生成した ResultSet から 1 レコード分の
値を取り出して Tuple 生成&返却
ResultSet 終端に達していたら
空の Tuple を生成&返却
ReScanForeignScan
ResultSet の初期化
(カーソルの初期化)
EndForeignScan
各種の終了処理
他のインタフェース
プラン・統計情報等は
まともに実装できていない・・・
更新系も未対応
neo4j_fdw のデモ
興味のある方はソースを
Github に置いたので
見てくださいませ
(まだまだ開発途上ですが)
https://github.com/nuko-yokohama/neo4j_fdw
http://wiki.postgresql.org/wiki/Foreign_data_wrappers#Neo4j_fdw
なんか pull request 来てるけど放置してる・・・
まずい・・・
TODO:
限定された条件 pushdown
きちんとしたデータ型対応
node/edge の hstore 化
更新対応(出来るの?)

More Related Content

What's hot

HDFSのスケーラビリティとマルチマスタへの取り組み
HDFSのスケーラビリティとマルチマスタへの取り組みHDFSのスケーラビリティとマルチマスタへの取り組み
HDFSのスケーラビリティとマルチマスタへの取り組み
shunsuke Mikami
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
弘毅 露崎
 
R以外の研究ツール
R以外の研究ツールR以外の研究ツール
R以外の研究ツール
弘毅 露崎
 
[OLD/STALE] Redis cluster (japanese)
[OLD/STALE] Redis cluster (japanese)[OLD/STALE] Redis cluster (japanese)
[OLD/STALE] Redis cluster (japanese)
Shunichi Shinohara
 
おれよりすごいておくれにあいにきた
おれよりすごいておくれにあいにきたおれよりすごいておくれにあいにきた
おれよりすごいておくれにあいにきた
Katsuyoshi Matsumoto
 

What's hot (20)

Orb 仮想通貨・地域通貨ソリューション
Orb 仮想通貨・地域通貨ソリューションOrb 仮想通貨・地域通貨ソリューション
Orb 仮想通貨・地域通貨ソリューション
 
HDFSのスケーラビリティとマルチマスタへの取り組み
HDFSのスケーラビリティとマルチマスタへの取り組みHDFSのスケーラビリティとマルチマスタへの取り組み
HDFSのスケーラビリティとマルチマスタへの取り組み
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
 
Programming under capability mode
Programming under capability modeProgramming under capability mode
Programming under capability mode
 
MySQLのインデックス入門
MySQLのインデックス入門MySQLのインデックス入門
MySQLのインデックス入門
 
xrdpで変える!社内のPC環境
xrdpで変える!社内のPC環境xrdpで変える!社内のPC環境
xrdpで変える!社内のPC環境
 
R以外の研究ツール
R以外の研究ツールR以外の研究ツール
R以外の研究ツール
 
Sfstudy #2
Sfstudy #2Sfstudy #2
Sfstudy #2
 
カウチなやつら CouchDB in the room
カウチなやつら CouchDB in the roomカウチなやつら CouchDB in the room
カウチなやつら CouchDB in the room
 
今から始めるDocument db
今から始めるDocument db今から始めるDocument db
今から始めるDocument db
 
xrdpを使ったお手軽BYOD環境の構築
xrdpを使ったお手軽BYOD環境の構築xrdpを使ったお手軽BYOD環境の構築
xrdpを使ったお手軽BYOD環境の構築
 
Postgre sqlから見るnosql
Postgre sqlから見るnosqlPostgre sqlから見るnosql
Postgre sqlから見るnosql
 
レッドハット グラスター ストレージ Red Hat Gluster Storage (Japanese)
レッドハット グラスター ストレージ Red Hat Gluster Storage (Japanese)レッドハット グラスター ストレージ Red Hat Gluster Storage (Japanese)
レッドハット グラスター ストレージ Red Hat Gluster Storage (Japanese)
 
[OLD/STALE] Redis cluster (japanese)
[OLD/STALE] Redis cluster (japanese)[OLD/STALE] Redis cluster (japanese)
[OLD/STALE] Redis cluster (japanese)
 
Dexiejs
DexiejsDexiejs
Dexiejs
 
RDBってなに?
RDBってなに?RDBってなに?
RDBってなに?
 
pysqldf
pysqldfpysqldf
pysqldf
 
商用DBからPostgreSQLへ まず知っておいて欲しいまとめ
商用DBからPostgreSQLへ まず知っておいて欲しいまとめ商用DBからPostgreSQLへ まず知っておいて欲しいまとめ
商用DBからPostgreSQLへ まず知っておいて欲しいまとめ
 
おれよりすごいておくれにあいにきた
おれよりすごいておくれにあいにきたおれよりすごいておくれにあいにきた
おれよりすごいておくれにあいにきた
 
知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能
 

Viewers also liked

Neo4jrbにおけるOGM
Neo4jrbにおけるOGMNeo4jrbにおけるOGM
Neo4jrbにおけるOGM
takabes00
 
グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ-
 グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ- グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ-
グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ-
Hisao Soyama
 

Viewers also liked (6)

Neo4jrbにおけるOGM
Neo4jrbにおけるOGMNeo4jrbにおけるOGM
Neo4jrbにおけるOGM
 
Neoの世界へ
Neoの世界へNeoの世界へ
Neoの世界へ
 
Neo4j発表者募集
Neo4j発表者募集Neo4j発表者募集
Neo4j発表者募集
 
グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ-
 グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ- グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ-
グラフデータベース「Neo4j」の 導入の導入(続き)-Cypherの基本のキ-
 
実務で役立つデータベースの活用法
実務で役立つデータベースの活用法実務で役立つデータベースの活用法
実務で役立つデータベースの活用法
 
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
 

Similar to Pgunconf neo4j fdw

WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
Recruit Technologies
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
Masayuki Kanou
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
Recruit Technologies
 

Similar to Pgunconf neo4j fdw (20)

The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugThe seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurug
 
Spring4Dの紹介
Spring4Dの紹介Spring4Dの紹介
Spring4Dの紹介
 
20151114 drupal温泉合宿 成果
20151114 drupal温泉合宿 成果20151114 drupal温泉合宿 成果
20151114 drupal温泉合宿 成果
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
 
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか by 日本ヒューレット・パッカード株式会社 後藤宏
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか  by 日本ヒューレット・パッカード株式会社 後藤宏[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか  by 日本ヒューレット・パッカード株式会社 後藤宏
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか by 日本ヒューレット・パッカード株式会社 後藤宏
 
Tokyo r38
Tokyo r38Tokyo r38
Tokyo r38
 
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
 
OSC2012 OSC.DB Hadoop
OSC2012 OSC.DB HadoopOSC2012 OSC.DB Hadoop
OSC2012 OSC.DB Hadoop
 
実はとても面白い...Documentation library
実はとても面白い...Documentation library実はとても面白い...Documentation library
実はとても面白い...Documentation library
 
MLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめMLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめ
 
[db tech showcase Tokyo 2017] A32: Attunity Replicate + Kafka + Hadoop マルチデータ...
[db tech showcase Tokyo 2017] A32: Attunity Replicate + Kafka + Hadoop マルチデータ...[db tech showcase Tokyo 2017] A32: Attunity Replicate + Kafka + Hadoop マルチデータ...
[db tech showcase Tokyo 2017] A32: Attunity Replicate + Kafka + Hadoop マルチデータ...
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
 
Mongo dbを知ろう devlove関西
Mongo dbを知ろう   devlove関西Mongo dbを知ろう   devlove関西
Mongo dbを知ろう devlove関西
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
 
セマンテックウェブとRDFDB
セマンテックウェブとRDFDBセマンテックウェブとRDFDB
セマンテックウェブとRDFDB
 
Hadoopデータプラットフォーム #cwt2013
Hadoopデータプラットフォーム #cwt2013Hadoopデータプラットフォーム #cwt2013
Hadoopデータプラットフォーム #cwt2013
 
Microsoft Build 2021 前夜祭 LT#4
Microsoft Build 2021 前夜祭 LT#4Microsoft Build 2021 前夜祭 LT#4
Microsoft Build 2021 前夜祭 LT#4
 
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
 
OpenDocument interoperability test workshop after story
OpenDocument interoperability test workshop after storyOpenDocument interoperability test workshop after story
OpenDocument interoperability test workshop after story
 

More from Toshi Harada

More from Toshi Harada (20)

無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
 
Pgunconf16 toast
Pgunconf16 toastPgunconf16 toast
Pgunconf16 toast
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psql
 
20190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg1220190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg12
 
20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
 
20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
 
20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev
 
Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
 
Chugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubChugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pub
 
Pgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-jaPgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-ja
 
Pgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversiPgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversi
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
 
Chugoku db 17th-lt-kly
Chugoku db 17th-lt-klyChugoku db 17th-lt-kly
Chugoku db 17th-lt-kly
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 

Pgunconf neo4j fdw