dblt#2 do-postgres-dream-of-graph-database

30
DBLT #2 で LT やってきた話 ぬこ@横浜 (@nuko_yokohama)

Upload: toshi-harada

Post on 15-Jan-2017

53 views

Category:

Technology


2 download

TRANSCRIPT

DBLT #2 でLT やってきた話

ぬこ@横浜 (@nuko_yokohama)

2

先日参加した、Database Lounge

Tokyo #2 の話Database Lounge Tokyo #2 公式ページhttp://database-lounge-tokyo.connpass.com/event/37649/ツイートまとめhttp://togetter.com/li/1022509

3

アシストさんの2F ラウンジ

本当にラウンジっぽくて

オサレですね。

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

5

この本に書いてあるような話はしなかった。

この本

6

PostgreSQL からグラフデータを扱ってみよう

詳細はここを見てねhttp://www.slideshare.net/toshiharada/do-postgresdreamofgraphdatabase

7

グラフデータベース Neo4j

ノード

関連

https://neo4j.com/Community Edition と Enterprise Edition があります。

8

PostgreSQL の更新を

Neo4j へ反映

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

スロット定義

10

ロジカルデコーディング

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 へこれを繰り返す

15

デモ

16

PostgreSQL の更新ログをNeo4j に適用できた。

やったね♪

17

PostgreSQL からSQL で

Neo4j を検索

18

ForeignData Wrapper

19

PostgreSQL の外部にあるデータに対して

標準的な SQL クエリでアクセスするための夢が広がりんぐ基盤

20

Neo4j のデータをSQL で検索するための

Foreign Data Wrapper を開発する。

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

23

何故か PostgreSQL Wiki に載ってる・・・

メンテナンスをサボっているので、 PostgreSQL 9.5 以降に対応してません・・・

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!

25

デモ

26

PostgreSQL からSQL を使って

Neo4j の検索ができた。

やったね♪

27

と、いうことで

28

ロジカルデコーディングとneo4j_fdw を組み合わせて

PostgreSQL からグラフデータベースNeo4j を扱えた!

29

で、何の役に立つのそれ?

30

おしまい