dblt#2 do-postgres-dream-of-graph-database
TRANSCRIPT
2
先日参加した、Database Lounge
Tokyo #2 の話Database Lounge Tokyo #2 公式ページhttp://database-lounge-tokyo.connpass.com/event/37649/ツイートまとめhttp://togetter.com/li/1022509
4
で、そんなオサレなとこで喋ってきた。
Lighting Talks1 「差分、増分、デルタ ( って何 ?) バックアップあれやこれや」 by @meijik2 「 Postgres はグラフデータベースの夢を見るか?」 by @nuko_yokohama3 「 An intelligent storage? 」 by @kkaigai4 「ポスグレのバックアップでやらかした話 (˚&˚) 」 by @kkkida_twtr
プログラムバックアップと障害復旧から考える Oracle Database, MySQL, PostgreSQL の違い ( 仮 ) @wrcsus4
パネルディスカッションデータベースのバックアップ、リストアについて@wrcsus4 @yoku0825 @kasa_zip @kumagi
今更ながら、俺以外のスピーカーが豪華すぎるなw
6
PostgreSQL からグラフデータを扱ってみよう
詳細はここを見てねhttp://www.slideshare.net/toshiharada/do-postgresdreamofgraphdatabase
7
グラフデータベース Neo4j
ノード
関連
https://neo4j.com/Community Edition と Enterprise Edition があります。
9
Neo4j Server
Logideco4neo4j
PostgreSQL
Relational Model
Cypher Query
WAL(wal_level=logical) Logical
Replication Slot
Execute Cypher Query on REST
Convert Cypher Query
PostgreSQL WAL to Neo4j
Graph Model
olumn1 column2 column3
・・・ ・・・ ・・・
・・・・ ・・・・ ・・・
Get Replication Slot Data
Decoding FunctionConvert JSON
スロット定義
11
ロジカルデコーディングPostgreSQL 9.4 から導入された基盤
WAL を任意形式にデコーディングする基盤デコーディング方法や、
デコードされた更新情報の反映は利用者が好きに開発できる。
夢が広がりんぐ機能
12
Decoding Functionざっくり言うと PostgreSQL の
更新ログ (WAL) を任意の形式の論理ログに変換する関数。
どういった形式に変換するのかは、Decoding Function 実装者まかせ。
JSON に変換すると捗りそう・・・
13
Decoding Function探したら、やっぱりありましたw
「 PostgreSQL の Logical Decoding 機能についての紹介」http://qiita.com/bwtakacy/items/d8461518a1770524e0d6
まとめを書いたのは@bwtakacy さん
pg_rman や pg_bulkload のメンテナやってる人です。
Deconding Function Plug-in wal2jsonhttps://github.com/eulerto/wal2json
名前のとおり WAL を JSON 形式にデコードしてくれる。せっかくなので、今回はこれを使ってみる。
14
Logideco4neo4j
Logical Decoding 内容からNeo4j への反映に必要な処理
レプリケーションスロットへの検索検索結果から Cypher Query を生成
Cypher Query を REST API で Neo4j へこれを繰り返す
21
Neo4j Server
Logideco4neo4j
PostgreSQL
Cypher Query
WAL(wal_level=logical) Logical
Replication Slot
Execute Cypher Query on REST
Convert Cypher Query
olumn1 column2 column3
・・・ ・・・ ・・・
・・・・ ・・・・ ・・・
Get Replication Slot Data
Decoding FunctionConvert JSON
Neo4j Foriegn Data Wrapper
Defined Cypher Query
Execute Cypher Query on REST
Generate PostgreSQL Record
PostgreSQLRecord
JSONResult
Provide Cypher Result View
SQL
CypherQuery
スロット定義
22
というか、以前 Neo4j に接続する FDW を作っていた
https://github.com/nuko-yokohama/neo4j_fdw
24
neo4j_fdw外部データラッパを登録
外部サーバと外部テーブルを定義CREATE EXTENSION neo4j_fdw;
CREATE SERVER foo FOREIGN DATA WRAPPER neo4j_fdw OPTIONS (url 'http://localhost:7474/db/data/cypher');
CREATE FOREIGN TABLE persons ( uid text, name text, gender text, age text, company text ) SERVER foo OPTIONS (query '{"query":"MATCH (c:company)-[e:employ]->(p:person) RETURN p.nid, p.name, p.gender, p.age, c.name"}');
あとは persons テーブルに SELECT 文を発行すれば OK!