Postgre sqlから見るnosql

Preview:

Citation preview

PostgreSQLから見るNoSQLMyNA・JPUG 合同DB勉強会 in 東京

What is it?

RDBの限界を感じた事ありませんか?

What is it?

PostgreSQLは新しい選択肢を用意します

What is it?

外部データラッパ (Foreign Data Wrapper)

What is it?

PostgreSQLはRDBの外の世界と繋がる

What is it?

FDWの

使い方と作り方

をご紹介します

What is it?

内部実装や細かい仕様

の話は今日はしません

あじぇんだ

1 自己紹介 2 外部データラッパーとは 3 外部データラッパーを使う 4 外部データラッパーを作る 5 まとめ

あじぇんだ

1 自己紹介 2 外部データラッパーとは 3 外部データラッパーを使う 4 外部データラッパーを作る 5 まとめ

自己紹介名前:曽根 壮大(そね たけとも) 年齢:30歳(三人の子供がいます) 職業:Webエンジニア

所属:日本PostgreSQLユーザ会

   中国支部 支部長

  技術的にはLL系言語とかRDBが好きです

あじぇんだ

1 自己紹介 2 外部データラッパーとは 3 外部データラッパーを使う 4 外部データラッパーを作る 5 まとめ

FDWとは

外部テーブルを作成するための機能 (外部のデータをtableにする)

FDWとは

外部データにテーブルと同様に SQL文でアクセスできる

FDWとは

• WHEREやORDER BYが使える • GROUP BYなどの集合関数も使える • JOINなど、他tableと関連付け出来る • 更新や削除も出来る(ただし9.3から)

FDWとは

外部データ ↓

DB、CSV、JSON、WebAPIなんでも良い

FDWとは

PostgreSQL to

PostgreSQL

FDWとは

MySQL to

PostgreSQL

FDWとは

MongoDB to

PostgreSQL

FDWとは

Git to

PostgreSQL

SQL Databases Wrappers • postgres_fdw • oracle_fdw • mysql_fdw • odbc_fdw • jdbc_fdw

NoSQL Databases Wrappers• couchdb_fdw • MonetDB FDW • mongo_fdw • redis_fdw • Neo4j fdw • Tycoon FDW

Others• git_fdw • ldap_fdw • IMAP_fdw • s3_fdw • www_fdw • OS_fdw

FDWとは

その他に既に多くの実装がある

あじぇんだ

1 自己紹介 2 外部データラッパーとは 3 外部データラッパーを使う 4 外部データラッパーを作る 5 まとめ

SQL Databases Wrappers • postgres_fdw • oracle_fdw • mysql_fdw • odbc_fdw • jdbc_fdw

FDWを使うMySQLPostgreSQL

FDWを使うMySQLPostgreSQL

TABLE

FDWを使う

EXTENSION

MySQLPostgreSQL

TABLE

FDWを使う

EXTENSION

MySQLPostgreSQL

TABLE

mysql_fdwをインストールする

FDWを使う

server

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

FDWを使う

server

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

MySQLの接続先を設定する

MySQLの接続ユーザを設定する

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

PostgreSQLの外部tableを作成する

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

ClientSQLで問い合わせ

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

ClientSQLで問い合わせ

外部tableにアクセス

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client

アクセス先を確認

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client

MySQLにクエリを投げる

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client

実行結果を取得

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client実行結果を表示

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client

FDWを使う

百聞は一見(デモ)し如かず

あじぇんだ

1 自己紹介 2 外部データラッパーとは 3 外部データラッパーを使う 4 外部データラッパーを作る 5 まとめ

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client

ここを作る

FDWを作る

現時点では ほんの少しの元気と勇気と

PostgreSQLの内部構造に関する知識 がある程度必要です。

FDW超詳しい人

FDWを作る

なんか出来そう!!

FDWを作る

1週間後…

FDWを作る

圧倒的挫折…

FDWを作る

出来る人の簡単

FDWを作る

出来る人の簡単 ↓

凡人の超えられない壁

FDWを作る

それなりの覚悟とちゃんとした PostgreSQLとCの知識が必要

FDWを作る

でも大丈夫

FDWを作る

簡単にPythonで作る方法がある

FDWを作る

Multicorn

Multicorn

FDWを Pythonで実装する ためのLibrary

Multicorn

案ずるより産むが易し (作ってみたのでデモ)

あじぇんだ

1 自己紹介 2 外部データラッパーとは 3 外部データラッパーを使う 4 外部データラッパーを作る 5 まとめ

まとめ

PostgreSQLから外の世界に繋げる

まとめ

他DBと結合、集約関数が使える

まとめ

外部tableはRDB、NoSQL問わない

まとめ

FDWは既に多くの実装がある (車輪の再発明が要らない)

まとめ

しかし速くは無い (オーバヘッドはそれなりにある)

まとめ

FDWは作れる ↓

ガッツリ作る場合はC サクッと作る場合はPython

まとめ

多様性は善

まとめ

PostgreSQLは多様性を受け入れる

まとめ

PostgreSQLは多様性を受け入れる

参考資料

・公式PostgreSQL Wiki https://wiki.postgresql.org/wiki/Foreign_data_wrappers

・PGXN(PostgreSQL Extension Network) http://pgxn.org/

・公式ドキュメント(日本語) https://www.postgresql.jp/document/9.4/html/postgres-fdw.html

FDWにおける銀の弾丸

花田さん(@s87)をWatchする

FDWにおける銀の弾丸

花田さん(@s87)をWatchする ↓

今日の会場に潜んでるらしい

ご静聴ありがとうございました。