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

Postgre sqlから見るnosql

Embed Size (px)

Citation preview

Page 1: Postgre sqlから見るnosql

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

Page 2: Postgre sqlから見るnosql

What is it?

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

Page 3: Postgre sqlから見るnosql

What is it?

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

Page 4: Postgre sqlから見るnosql

What is it?

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

Page 5: Postgre sqlから見るnosql

What is it?

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

Page 6: Postgre sqlから見るnosql

What is it?

FDWの

使い方と作り方

をご紹介します

Page 7: Postgre sqlから見るnosql

What is it?

内部実装や細かい仕様

の話は今日はしません

Page 8: Postgre sqlから見るnosql

あじぇんだ

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

Page 9: Postgre sqlから見るnosql

あじぇんだ

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

Page 10: Postgre sqlから見るnosql

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

所属:日本PostgreSQLユーザ会

   中国支部 支部長

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

Page 11: Postgre sqlから見るnosql

あじぇんだ

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

Page 12: Postgre sqlから見るnosql

FDWとは

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

Page 13: Postgre sqlから見るnosql

FDWとは

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

Page 14: Postgre sqlから見るnosql

FDWとは

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

Page 15: Postgre sqlから見るnosql

FDWとは

外部データ ↓

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

Page 16: Postgre sqlから見るnosql

FDWとは

PostgreSQL to

PostgreSQL

Page 17: Postgre sqlから見るnosql

FDWとは

MySQL to

PostgreSQL

Page 18: Postgre sqlから見るnosql

FDWとは

MongoDB to

PostgreSQL

Page 19: Postgre sqlから見るnosql

FDWとは

Git to

PostgreSQL

Page 20: Postgre sqlから見るnosql

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

Page 21: Postgre sqlから見るnosql

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

Page 22: Postgre sqlから見るnosql

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

Page 23: Postgre sqlから見るnosql

FDWとは

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

Page 24: Postgre sqlから見るnosql

あじぇんだ

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

Page 25: Postgre sqlから見るnosql

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

Page 26: Postgre sqlから見るnosql

FDWを使うMySQLPostgreSQL

Page 27: Postgre sqlから見るnosql

FDWを使うMySQLPostgreSQL

TABLE

Page 28: Postgre sqlから見るnosql

FDWを使う

EXTENSION

MySQLPostgreSQL

TABLE

Page 29: Postgre sqlから見るnosql

FDWを使う

EXTENSION

MySQLPostgreSQL

TABLE

mysql_fdwをインストールする

Page 30: Postgre sqlから見るnosql

FDWを使う

server

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Page 31: Postgre sqlから見るnosql

FDWを使う

server

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

MySQLの接続先を設定する

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

Page 32: Postgre sqlから見るnosql

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Page 33: Postgre sqlから見るnosql

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

PostgreSQLの外部tableを作成する

Page 34: Postgre sqlから見るnosql

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client

Page 35: Postgre sqlから見るnosql

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

ClientSQLで問い合わせ

Page 36: Postgre sqlから見るnosql

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

ClientSQLで問い合わせ

外部tableにアクセス

Page 37: Postgre sqlから見るnosql

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client

アクセス先を確認

Page 38: Postgre sqlから見るnosql

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client

MySQLにクエリを投げる

Page 39: Postgre sqlから見るnosql

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client

実行結果を取得

Page 40: Postgre sqlから見るnosql

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client実行結果を表示

Page 41: Postgre sqlから見るnosql

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client

Page 42: Postgre sqlから見るnosql

FDWを使う

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

Page 43: Postgre sqlから見るnosql

あじぇんだ

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

Page 44: Postgre sqlから見るnosql

FDWを使う

server

FOREIGN TABLE

EXTENSION

USER MAPPING

MySQLPostgreSQL

TABLE

Client

ここを作る

Page 45: Postgre sqlから見るnosql

FDWを作る

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

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

FDW超詳しい人

Page 46: Postgre sqlから見るnosql

FDWを作る

なんか出来そう!!

Page 47: Postgre sqlから見るnosql

FDWを作る

1週間後…

Page 48: Postgre sqlから見るnosql

FDWを作る

圧倒的挫折…

Page 49: Postgre sqlから見るnosql

FDWを作る

出来る人の簡単

Page 50: Postgre sqlから見るnosql

FDWを作る

出来る人の簡単 ↓

凡人の超えられない壁

Page 51: Postgre sqlから見るnosql

FDWを作る

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

Page 52: Postgre sqlから見るnosql

FDWを作る

でも大丈夫

Page 53: Postgre sqlから見るnosql

FDWを作る

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

Page 54: Postgre sqlから見るnosql

FDWを作る

Multicorn

Page 55: Postgre sqlから見るnosql

Multicorn

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

Page 56: Postgre sqlから見るnosql

Multicorn

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

Page 57: Postgre sqlから見るnosql

あじぇんだ

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

Page 58: Postgre sqlから見るnosql

まとめ

PostgreSQLから外の世界に繋げる

Page 59: Postgre sqlから見るnosql

まとめ

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

Page 60: Postgre sqlから見るnosql

まとめ

外部tableはRDB、NoSQL問わない

Page 61: Postgre sqlから見るnosql

まとめ

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

Page 62: Postgre sqlから見るnosql

まとめ

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

Page 63: Postgre sqlから見るnosql

まとめ

FDWは作れる ↓

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

Page 64: Postgre sqlから見るnosql

まとめ

多様性は善

Page 65: Postgre sqlから見るnosql

まとめ

PostgreSQLは多様性を受け入れる

Page 66: Postgre sqlから見るnosql

まとめ

PostgreSQLは多様性を受け入れる

Page 67: Postgre sqlから見るnosql

参考資料

・公式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

Page 68: Postgre sqlから見るnosql

FDWにおける銀の弾丸

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

Page 69: Postgre sqlから見るnosql

FDWにおける銀の弾丸

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

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

Page 70: Postgre sqlから見るnosql

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