Pgunconf neo4j fdw

Post on 28-Nov-2014

790 views 6 download

description

2013/7/13 PostgreSQL Unconference

Transcript of Pgunconf neo4j fdw

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

・・・ ・・・ ・・・

・・・・ ・・・・ ・・・

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

条件 pushdown は早々に諦めた。

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

面倒(本音)

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

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

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

ResultSet を生成

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

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

空の Tuple を生成&返却

ReScanForeignScanResultSet の初期化

(カーソルの初期化)

EndForeignScan各種の終了処理

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

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

neo4j_fdw のデモ

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

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

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

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

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