Pgunconf neo4j fdw

22
Neo4j-FDW ぬこ@横浜 (@nuko_yokohama)

description

2013/7/13 PostgreSQL Unconference

Transcript of Pgunconf neo4j fdw

Page 1: Pgunconf neo4j fdw

Neo4j-FDW

ぬこ@横浜 (@nuko_yokohama)

Page 2: Pgunconf neo4j fdw

FDW とは

PostgreSQL にはForeign Data Wrapper という

外部情報源を仮想テーブル化するステキ開発フレームワークがある。

( Oracle, MySQL, Redis, MongoDB, CouchDB, Twitter, etc… )

Page 3: Pgunconf neo4j fdw

光あるところに影がある

まこと栄光の影に数知れぬFDW の姿があった

命をかけて使われぬ FDW をつくった暇人たち

Page 4: Pgunconf neo4j fdw

今日のお題Neo4j FDW 試作

Page 5: Pgunconf neo4j fdw

ちょっと前にNeo4j という

グラフデータベースを触る機会があった。

Page 6: Pgunconf neo4j fdw

What's Neo4j ?

Page 7: Pgunconf neo4j fdw

オープンソースのグラフデータベース「ノード」と「エッジ」を操作ビジュアルな管理コンソール

Java-API/REST-API による操作Cypher という問合わせ言語

Page 8: Pgunconf neo4j fdw

見てもらうほうが早いと思うのでNeo4j のデモ

Page 9: Pgunconf neo4j fdw

Cypher クエリを一定の規則で書くと

RDBMS の ResultSetっぽい結果が返る

Page 10: Pgunconf neo4j fdw

Cypher を利用してPostgreSQL から SQL 経由で

Neo4j を検索するFDW を作ってみた

neo4j_fdw

Page 11: Pgunconf neo4j fdw

Neo4j Server

Neo4j Foriegn Data WrapperPostgreSQL

Relational Model

CypherQuery

JSONResult

SQL

PostgreSQLRecord

Defined Cypher Query

Execute Cypher Query on REST

Generate PostgreSQL Record

Neo4j-FDWConceptProvide Cypher result View.

Graph Model

olumn1 column2 column3

・・・ ・・・ ・・・

・・・・ ・・・・ ・・・

Page 12: Pgunconf neo4j fdw

実はかなり手抜きな FDW です

Page 13: Pgunconf neo4j fdw

条件 pushdown は早々に諦めた。

Cypher の場合、 WHERE 句 pushdown は性能上はあまり効果的でない(建前)

面倒(本音)

Page 14: Pgunconf neo4j fdw

neo4j_fdw の実装以下、各関数の簡単な実装方針の説明

Page 15: Pgunconf neo4j fdw

BeginForeignScanCREATE SERVER に記述した接続情報で Neo4j に接続し

CREATE FOREIGN TABLE に記述したCypher を REST-API 経由で実行Cypher 実行結果( JSON) から

ResultSet を生成

Page 16: Pgunconf neo4j fdw

IterateForeignScan生成した ResultSet から 1 レコード分の

値を取り出して Tuple 生成&返却ResultSet 終端に達していたら

空の Tuple を生成&返却

Page 17: Pgunconf neo4j fdw

ReScanForeignScanResultSet の初期化

(カーソルの初期化)

Page 18: Pgunconf neo4j fdw

EndForeignScan各種の終了処理

Page 19: Pgunconf neo4j fdw

他のインタフェースプラン・統計情報等は

まともに実装できていない・・・更新系も未対応

Page 20: Pgunconf neo4j fdw

neo4j_fdw のデモ

Page 21: Pgunconf neo4j fdw

興味のある方はソースをGithub に置いたので

見てくださいませ(まだまだ開発途上ですが)

https://github.com/nuko-yokohama/neo4j_fdwhttp://wiki.postgresql.org/wiki/Foreign_data_wrappers#Neo4j_fdw

なんか pull request 来てるけど放置してる・・・まずい・・・

Page 22: Pgunconf neo4j fdw

TODO:限定された条件 pushdownきちんとしたデータ型対応node/edge の hstore 化更新対応(出来るの?)