Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
知って得するWebで便利な
PostgreSQLの3つの機能
オープンソースカンファレンス2015@新潟
What is it?
データベースは何を基準に選んでますか?
What is it?
RDBを制する者は
データ層を制する
と言っても過言ではありません
What is it?
そして
PostgreSQLを使えば開発で楽をする
ことが出来ます
What is it?
今日はそんなPostgreSQLの
Tipsをご紹介します
あじぇんだ
1 自己紹介
2 Window関数とマテビュー
3 外部データラッパ(FDW)
4 JSON型とJSONB型
5 まとめ
あじぇんだ
1 自己紹介
2 Window関数とマテビュー
3 外部データラッパ(FDW)
4 JSON型とJSONB型
5 まとめ
自己紹介
名前:曽根 壮大(そね たけとも)
年齢:30歳(三人の子供がいます)
職業:Webエンジニア
所属:日本PostgreSQLユーザ会
   中国支部 支部長
  技術的にはLL系言語とかRDBが好きです
https://dbstudychugoku.github.io/
MySQL使いが知るべき
PostgreSQLとの違いと変わらない一つのこと
http://soudai1025.blogspot.jp/2015/08/mysql2postgresql.html
あじぇんだ
1 自己紹介
2 Window関数とマテビュー
3 外部データラッパ(FDW)
4 JSON型とJSONB型
5 まとめ
Window関数とマテビュー
Window関数とマテビュー
Window関数とマテビュー
素早く帳票を作る
Window関数とマテビュー
Window関数
Window関数とマテビュー
Window関数
ウィンドウ関数は現在の行に何らの
関係するテーブル行の一纏まり全般
の計算を行う。
商品名 売上 売上日
プログラマのためのSQL 4200 2015-08-01
"内部構造から学ぶ 3600 2015-08-30
ソフトウェアデザイン 1300 2015-08-02
SQL実践入門 2580 2015-08-03
理論から学...
Window関数とマテビュー
まずは日別に集計する
実際のSQL
SELECT
to_char(
sum(“売上"),'FM999,999,999'
) AS "日別売上"
, "売上日"
FROM "売上表"
GROUP BY “売上日" ORDER BY "売上日"
実際のSQL
SELECT
to_char(
sum(“売上"),'FM999,999,999'
) AS "日別売上"
, "売上日"
FROM "売上表"
GROUP BY “売上日" ORDER BY "売上日"
実際のSQL
SELECT
to_char(
sum(“売上"),'FM999,999,999'
) AS "日別売上"
, "売上日"
FROM "売上表"
GROUP BY “売上日" ORDER BY "売上日"
3桁区切りでカンマを入れる
日別売上 売上日
2,643,552 2015-08-01
2,650,368 2015-08-02
2,601,180 2015-08-03
2,598,392 2015-08-04
2,635,064 2015-08-05
2,650,85...
Window関数とマテビュー
前日との差分を出したい
Window関数とマテビュー
前日との差分を出したい
↓
lag()を使って集計する
実際のSQL
SELECT
*
, lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上
FROM
(SELECT
to_char(sum("売上"),'FM999,999,999') AS "日別売上"
, "売上...
実際のSQL
SELECT
*
, lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上
FROM
(SELECT
to_char(sum("売上"),'FM999,999,999') AS "日別売上"
, "売上...
実際のSQL
SELECT
*
, lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上
FROM
(SELECT
to_char(sum("売上"),'FM999,999,999') AS "日別売上"
, "売上...
実際のSQL
SELECT
*
, lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上
FROM
(SELECT
to_char(sum("売上"),'FM999,999,999') AS "日別売上"
, "売上...
実際のSQL
SELECT
*
, lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上
FROM
(SELECT
to_char(sum("売上"),'FM999,999,999') AS "日別売上"
, "売上...
日別売上 売上日 前日売上
2,643,552 2015-08-01 NULL
2,650,368 2015-08-02 2,643,552
2,601,180 2015-08-03 2,650,368
2,598,392 2015-08-04...
日別売上 売上日 前日売上
2,643,552 2015-08-01 NULL
2,650,368 2015-08-02 2,643,552
2,601,180 2015-08-03 2,650,368
2,598,392 2015-08-04...
Window関数とマテビュー
翌日の場合は?
Window関数とマテビュー
翌日の場合は?
↓
lead()を使って集計出来る
関数 説明
row_number() 行番号
rank() ランキング (同率で番号を飛ばす)
dense_rank() ランキング (同率で番号を飛ばさない)
percent_rank() ランキング (%で表示) : (rank - 1) ...
Window関数とマテビュー
データが多くて遅い
Window関数とマテビュー
マテリアライズドビュー
Window関数とマテビュー
マテリアライズドビュー
実体の存在するView。
参照したクエリ結果を保存するため、
参照元を更新した際はマテビューの
更新も必要になる。
※ただしPostgreSQL 9.3からの機能
Window関数とマテビュー
クエリ結果を実体化する
Window関数とマテビュー
クエリ結果を実体化する
↓
高速化
Window関数とマテビュー
マテビューは銀の弾丸ではない
Window関数とマテビュー
マテビューの問題点
・リフレッシュ管理が必要(自動更新しない)
※ただし、9.4から自動更新が可能
・普通のテーブル同様に表領域を消費する
・リフレッシュはそれなりにリソースを使う
Window関数とマテビュー
更新が多いとボトルネックになる
Window関数とマテビュー
まとめ
Window関数とマテビュー
まとめ
Window関数とマテビュー
まとめ
1 機能を覚えると実装が楽に
Window関数とマテビュー
まとめ
1 機能を覚えると実装が楽に
2 拡張を見据えた設計が大事
Window関数とマテビュー
まとめ
1 機能を覚えると実装が楽に
2 拡張を見据えた設計が大事
3 要件に合わせて選択肢を選ぶ
あじぇんだ
1 自己紹介
2 Window関数とマテビュー
3 外部データラッパ(FDW)
4 JSON型とJSONB型
5 まとめ
外部データラッパ(FDW)
Window関数が便利!!
外部データラッパ(FDW)
Window関数が便利!!
↓
でも弊社、MySQL(́・ω・`)
外部データラッパ(FDW)
でも大丈夫!!
外部データラッパ(FDW)
FDWを使えばMySQLと繋がる
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とは
その他に既に多くの実装がある
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
Client
SQLで問い合わせ
FDWを使う
server
FOREIGN
TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
SQLで問い合わせ
外部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を使う
既存環境の集計作業が大変
↓
そのままPostgreSQLに委託出来る
あじぇんだ
1 自己紹介
2 Window関数とマテビュー
3 外部データラッパ(FDW)
4 JSON型とJSONB型
5 まとめ
JSON型とJSONB型
PostgreSQLで今一番アツい機能
※そーだい調べ
JSON型とJSONB型
ドキュメント指向
JSON型とJSONB型
ドキュメント指向
name : hoge
role1 : 開発
role2 : 運用
age : 30
name : fuga
role1 : 営業
from : 広島
age : 25
name : bar
role...
JSON型とJSONB型
ドキュメント指向
name : hoge
role1 : 開発
role2 : 運用
age : 30
name : fuga
role1 : 営業
from : 広島
age : 25
name : bar
role...
JSON型とJSONB型
ドキュメント指向
name : hoge
role1 : 開発
role2 : 運用
age : 30
name : fuga
role1 : 営業
from : 広島
age : 25
name : bar
role...
id name properties
1 test1 { name : hoge", age :30, role :1}
2 test2 { name : fuga", age :21, role :1}
3 test3 { name : ba...
JSON型とJSONB型
値を指定した検索
実際のSQL
SELECT
*
FROM
demo_json
WHERE
properties->>”name” = “hoge”
実際のSQL
SELECT
*
FROM
demo_json
WHERE
properties->>”name” = “hoge”
JSONの値を指定して直接検索出来る
JSON型とJSONB型
INDEXを指定する
実際のSQL
CREATE INDEX
  demo_json_index
ON
  demo_json
  (properties->>'name');
実際のSQL
CREATE INDEX
  demo_json_index
ON
  demo_json
  (properties->>'name');
INDEX名
実際のSQL
CREATE INDEX
  demo_json_index
ON
  demo_json
  (properties->>'name');
INDEX名
対象テーブル
実際のSQL
CREATE INDEX
  demo_json_index
ON
  demo_json
  (properties->>'name');
INDEX名
対象テーブル
式を指定する
JSON型とJSONB型
銀の弾丸ではない(本日二度目
JSON型とJSONB型
制約を設けれない
JSON型とJSONB型
制約を設けれない
↓
外部キーや一意制約がない
JSON型とJSONB型
データ登録のトレードオフ
JSON型とJSONB型
データ登録のトレードオフ
↓
自由な保存   正しく守る
JSON型とJSONB型
クエリに対する制限
JSON型とJSONB型
クエリに対する制限
↓
集約関数などが使えない
JSON型とJSONB型
要件に合わせて選択肢を選ぶ
JSON型とJSONB型
まとめ
1 値で検索が出来る
2 値の検索でINDEXが使える
3 要件に合わせて選択肢を選ぶ
あじぇんだ
1 自己紹介
2 Window関数とマテビュー
3 外部データラッパ(FDW)
4 JSON型とJSONB型
5 まとめ
まとめ
Webアプリケーションの複雑化
まとめ
Webアプリケーションの複雑化
↓
データ構造も複雑化
まとめ
柔軟で高速な検索が必要
まとめ
柔軟で高速な検索が必要
↓
運用では正しいデータの保存も重要
まとめ
データベースを知ることが大事
まとめ
PostgreSQLは
Webにもマッチします
まとめ
スタートアップに
まとめ
リプレースに
まとめ
既存拡張に
まとめ
PostgreSQL使ってみませんか?
ご静聴ありがとうございました。
知って得するWebで便利なpostgre sqlの3つの機能
Upcoming SlideShare
Loading in …5
×
Upcoming SlideShare
PostgreSQLとpython
Next
Download to read offline and view in fullscreen.

8

Share

Download to read offline

知って得するWebで便利なpostgre sqlの3つの機能

Download to read offline

OSC新潟の登壇資料です。

http://www.ospn.jp/osc2015-niigata/

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

知って得するWebで便利なpostgre sqlの3つの機能

  1. 1. 知って得するWebで便利な PostgreSQLの3つの機能 オープンソースカンファレンス2015@新潟
  2. 2. What is it? データベースは何を基準に選んでますか?
  3. 3. What is it? RDBを制する者は データ層を制する と言っても過言ではありません
  4. 4. What is it? そして PostgreSQLを使えば開発で楽をする ことが出来ます
  5. 5. What is it? 今日はそんなPostgreSQLの Tipsをご紹介します
  6. 6. あじぇんだ 1 自己紹介 2 Window関数とマテビュー 3 外部データラッパ(FDW) 4 JSON型とJSONB型 5 まとめ
  7. 7. あじぇんだ 1 自己紹介 2 Window関数とマテビュー 3 外部データラッパ(FDW) 4 JSON型とJSONB型 5 まとめ
  8. 8. 自己紹介 名前:曽根 壮大(そね たけとも) 年齢:30歳(三人の子供がいます) 職業:Webエンジニア 所属:日本PostgreSQLユーザ会    中国支部 支部長   技術的にはLL系言語とかRDBが好きです
  9. 9. https://dbstudychugoku.github.io/
  10. 10. MySQL使いが知るべき PostgreSQLとの違いと変わらない一つのこと http://soudai1025.blogspot.jp/2015/08/mysql2postgresql.html
  11. 11. あじぇんだ 1 自己紹介 2 Window関数とマテビュー 3 外部データラッパ(FDW) 4 JSON型とJSONB型 5 まとめ
  12. 12. Window関数とマテビュー Window関数とマテビュー
  13. 13. Window関数とマテビュー 素早く帳票を作る
  14. 14. Window関数とマテビュー Window関数
  15. 15. Window関数とマテビュー Window関数 ウィンドウ関数は現在の行に何らの 関係するテーブル行の一纏まり全般 の計算を行う。
  16. 16. 商品名 売上 売上日 プログラマのためのSQL 4200 2015-08-01 "内部構造から学ぶ 3600 2015-08-30 ソフトウェアデザイン 1300 2015-08-02 SQL実践入門 2580 2015-08-03 理論から学ぶデータベース 3110 2015-08-04 SQL逆引き大全363の極意 2600 2015-08-30 プログラマのためのSQL 4200 2015-08-30 SQL実践入門 2580 2015-08-30 理論から学ぶデータベース 3110 2015-08-05 SQL実践入門 2580 2015-08-30 リーダブルコード 2592 2015-08-30 リーダブルコード 2592 2015-08-30 データベース・リファクタ 3000 2015-08-30 達人に学ぶDB設計 2800 2015-08-30 : : : : : : ※実務では編は正規化するべき
  17. 17. Window関数とマテビュー まずは日別に集計する
  18. 18. 実際のSQL SELECT to_char( sum(“売上"),'FM999,999,999' ) AS "日別売上" , "売上日" FROM "売上表" GROUP BY “売上日" ORDER BY "売上日"
  19. 19. 実際のSQL SELECT to_char( sum(“売上"),'FM999,999,999' ) AS "日別売上" , "売上日" FROM "売上表" GROUP BY “売上日" ORDER BY "売上日"
  20. 20. 実際のSQL SELECT to_char( sum(“売上"),'FM999,999,999' ) AS "日別売上" , "売上日" FROM "売上表" GROUP BY “売上日" ORDER BY "売上日" 3桁区切りでカンマを入れる
  21. 21. 日別売上 売上日 2,643,552 2015-08-01 2,650,368 2015-08-02 2,601,180 2015-08-03 2,598,392 2015-08-04 2,635,064 2015-08-05 2,650,852 2015-08-06 2,642,568 2015-08-07 2,613,876 2015-08-08 2,658,504 2015-08-09 2,637,376 2015-08-10 2,617,840 2015-08-11 2,596,896 2015-08-12 2,669,644 2015-08-13 2,623,568 2015-08-14 : : : :
  22. 22. Window関数とマテビュー 前日との差分を出したい
  23. 23. Window関数とマテビュー 前日との差分を出したい ↓ lag()を使って集計する
  24. 24. 実際のSQL SELECT * , lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上 FROM (SELECT to_char(sum("売上"),'FM999,999,999') AS "日別売上" , "売上日" FROM "売上表" GROUP BY "売上日") AS "集計"
  25. 25. 実際のSQL SELECT * , lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上 FROM (SELECT to_char(sum("売上"),'FM999,999,999') AS "日別売上" , "売上日" FROM "売上表" GROUP BY "売上日") AS "集計"
  26. 26. 実際のSQL SELECT * , lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上 FROM (SELECT to_char(sum("売上"),'FM999,999,999') AS "日別売上" , "売上日" FROM "売上表" GROUP BY "売上日") AS "集計" 先ほどのクエリをサブクエリにする
  27. 27. 実際のSQL SELECT * , lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上 FROM (SELECT to_char(sum("売上"),'FM999,999,999') AS "日別売上" , "売上日" FROM "売上表" GROUP BY "売上日") AS "集計" Window関数の対象を指定 先ほどのクエリをサブクエリにする
  28. 28. 実際のSQL SELECT * , lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上 FROM (SELECT to_char(sum("売上"),'FM999,999,999') AS "日別売上" , "売上日" FROM "売上表" GROUP BY "売上日") AS "集計" Window関数の対象を指定 先ほどのクエリをサブクエリにする 前行の取得するカラムを指定
  29. 29. 日別売上 売上日 前日売上 2,643,552 2015-08-01 NULL 2,650,368 2015-08-02 2,643,552 2,601,180 2015-08-03 2,650,368 2,598,392 2015-08-04 2,601,180 2,635,064 2015-08-05 2,598,392 2,650,852 2015-08-06 2,635,064 2,642,568 2015-08-07 2,650,852 2,613,876 2015-08-08 2,642,568 2,658,504 2015-08-09 2,613,876 2,637,376 2015-08-10 2,658,504 2,617,840 2015-08-11 2,637,376 2,596,896 2015-08-12 2,617,840 2,669,644 2015-08-13 2,596,896 2,623,568 2015-08-14 2,669,644 : : : : : :
  30. 30. 日別売上 売上日 前日売上 2,643,552 2015-08-01 NULL 2,650,368 2015-08-02 2,643,552 2,601,180 2015-08-03 2,650,368 2,598,392 2015-08-04 2,601,180 2,635,064 2015-08-05 2,598,392 2,650,852 2015-08-06 2,635,064 2,642,568 2015-08-07 2,650,852 2,613,876 2015-08-08 2,642,568 2,658,504 2015-08-09 2,613,876 2,637,376 2015-08-10 2,658,504 2,617,840 2015-08-11 2,637,376 2,596,896 2015-08-12 2,617,840 2,669,644 2015-08-13 2,596,896 2,623,568 2015-08-14 2,669,644 : : : : : : 前行が無いのでNULL
  31. 31. Window関数とマテビュー 翌日の場合は?
  32. 32. Window関数とマテビュー 翌日の場合は? ↓ lead()を使って集計出来る
  33. 33. 関数 説明 row_number() 行番号 rank() ランキング (同率で番号を飛ばす) dense_rank() ランキング (同率で番号を飛ばさない) percent_rank() ランキング (%で表示) : (rank - 1) / (全行数 - 1) cume_dist() percent_rank に類似 : (現在の行の位置) / (全行数) ntile(N) ランキング (1..N に分割) lag(value, offset, default) ソート状態での前の行の値 lead(value, offset, default) ソート状態での後の行の値 first_value(value) 最初の値 last_value(value) 最後の値 nth_value(value, N) N番目の値 (1から数える)
  34. 34. Window関数とマテビュー データが多くて遅い
  35. 35. Window関数とマテビュー マテリアライズドビュー
  36. 36. Window関数とマテビュー マテリアライズドビュー 実体の存在するView。 参照したクエリ結果を保存するため、 参照元を更新した際はマテビューの 更新も必要になる。 ※ただしPostgreSQL 9.3からの機能
  37. 37. Window関数とマテビュー クエリ結果を実体化する
  38. 38. Window関数とマテビュー クエリ結果を実体化する ↓ 高速化
  39. 39. Window関数とマテビュー マテビューは銀の弾丸ではない
  40. 40. Window関数とマテビュー マテビューの問題点 ・リフレッシュ管理が必要(自動更新しない) ※ただし、9.4から自動更新が可能 ・普通のテーブル同様に表領域を消費する ・リフレッシュはそれなりにリソースを使う
  41. 41. Window関数とマテビュー 更新が多いとボトルネックになる
  42. 42. Window関数とマテビュー まとめ
  43. 43. Window関数とマテビュー まとめ
  44. 44. Window関数とマテビュー まとめ 1 機能を覚えると実装が楽に
  45. 45. Window関数とマテビュー まとめ 1 機能を覚えると実装が楽に 2 拡張を見据えた設計が大事
  46. 46. Window関数とマテビュー まとめ 1 機能を覚えると実装が楽に 2 拡張を見据えた設計が大事 3 要件に合わせて選択肢を選ぶ
  47. 47. あじぇんだ 1 自己紹介 2 Window関数とマテビュー 3 外部データラッパ(FDW) 4 JSON型とJSONB型 5 まとめ
  48. 48. 外部データラッパ(FDW) Window関数が便利!!
  49. 49. 外部データラッパ(FDW) Window関数が便利!! ↓ でも弊社、MySQL(́・ω・`)
  50. 50. 外部データラッパ(FDW) でも大丈夫!!
  51. 51. 外部データラッパ(FDW) FDWを使えばMySQLと繋がる
  52. 52. FDWとは 外部テーブルを作成するための機能 (外部のデータをtableにする)
  53. 53. FDWとは 外部データにテーブルと同様に SQL文でアクセスできる
  54. 54. FDWとは • WHEREやORDER BYが使える • GROUP BYなどの集合関数も使える • JOINなど、他tableと関連付け出来る • 更新や削除も出来る(ただし9.3から)
  55. 55. FDWとは 外部データ ↓ DB、CSV、JSON、WebAPIなんでも良い
  56. 56. FDWとは PostgreSQL to PostgreSQL
  57. 57. FDWとは MySQL to PostgreSQL
  58. 58. FDWとは MongoDB to PostgreSQL
  59. 59. FDWとは Git to PostgreSQL
  60. 60. SQL Databases Wrappers • postgres_fdw • oracle_fdw • mysql_fdw • odbc_fdw • jdbc_fdw
  61. 61. NoSQL Databases Wrappers • couchdb_fdw • MonetDB FDW • mongo_fdw • redis_fdw • Neo4j fdw • Tycoon FDW
  62. 62. Others • git_fdw • ldap_fdw • IMAP_fdw • s3_fdw • www_fdw • OS_fdw
  63. 63. FDWとは その他に既に多くの実装がある
  64. 64. SQL Databases Wrappers • postgres_fdw • oracle_fdw • mysql_fdw • odbc_fdw • jdbc_fdw
  65. 65. FDWを使う MySQLPostgreSQL
  66. 66. FDWを使う MySQLPostgreSQL TABLE
  67. 67. FDWを使う EXTENSION MySQLPostgreSQL TABLE
  68. 68. FDWを使う EXTENSION MySQLPostgreSQL TABLE mysql_fdwをインストールする
  69. 69. FDWを使う server EXTENSION USER MAPPING MySQLPostgreSQL TABLE
  70. 70. FDWを使う server EXTENSION USER MAPPING MySQLPostgreSQL TABLE MySQLの接続先を設定する MySQLの接続ユーザを設定する
  71. 71. FDWを使う server FOREIGN TABLE EXTENSION USER MAPPING MySQLPostgreSQL TABLE
  72. 72. FDWを使う server FOREIGN TABLE EXTENSION USER MAPPING MySQLPostgreSQL TABLE PostgreSQLの外部tableを作成する
  73. 73. FDWを使う server FOREIGN TABLE EXTENSION USER MAPPING MySQLPostgreSQL TABLE Client
  74. 74. FDWを使う server FOREIGN TABLE EXTENSION USER MAPPING MySQLPostgreSQL TABLE Client SQLで問い合わせ
  75. 75. FDWを使う server FOREIGN TABLE EXTENSION USER MAPPING MySQLPostgreSQL TABLE Client SQLで問い合わせ 外部tableにアクセス
  76. 76. FDWを使う server FOREIGN TABLE EXTENSION USER MAPPING MySQLPostgreSQL TABLE Client アクセス先を確認
  77. 77. FDWを使う server FOREIGN TABLE EXTENSION USER MAPPING MySQLPostgreSQL TABLE Client MySQLにクエリを投げる
  78. 78. FDWを使う server FOREIGN TABLE EXTENSION USER MAPPING MySQLPostgreSQL TABLE Client 実行結果を取得
  79. 79. FDWを使う server FOREIGN TABLE EXTENSION USER MAPPING MySQLPostgreSQL TABLE Client 実行結果を表示
  80. 80. FDWを使う server FOREIGN TABLE EXTENSION USER MAPPING MySQLPostgreSQL TABLE Client
  81. 81. FDWを使う 既存環境の集計作業が大変 ↓ そのままPostgreSQLに委託出来る
  82. 82. あじぇんだ 1 自己紹介 2 Window関数とマテビュー 3 外部データラッパ(FDW) 4 JSON型とJSONB型 5 まとめ
  83. 83. JSON型とJSONB型 PostgreSQLで今一番アツい機能 ※そーだい調べ
  84. 84. JSON型とJSONB型 ドキュメント指向
  85. 85. JSON型とJSONB型 ドキュメント指向 name : hoge role1 : 開発 role2 : 運用 age : 30 name : fuga role1 : 営業 from : 広島 age : 25 name : bar role1 : 総務
  86. 86. JSON型とJSONB型 ドキュメント指向 name : hoge role1 : 開発 role2 : 運用 age : 30 name : fuga role1 : 営業 from : 広島 age : 25 name : bar role1 : 総務 それぞれが独立したドキュメント ドキュメントにはユニークなIDでアクセスが可能
  87. 87. JSON型とJSONB型 ドキュメント指向 name : hoge role1 : 開発 role2 : 運用 age : 30 name : fuga role1 : 営業 from : 広島 age : 25 name : bar role1 : 総務 それぞれが独立しているので 自由な変更が可能
  88. 88. id name properties 1 test1 { name : hoge", age :30, role :1} 2 test2 { name : fuga", age :21, role :1} 3 test3 { name : bar , age :22, role :1} 4 test4 { name : foo , age :60, role :2} 5 test5 { name :toto, age :16, role :2} 6 test6 { name : titi , age :30, role :2} 7 test7 { name : tata , age :30, role :3} : : : : : :
  89. 89. JSON型とJSONB型 値を指定した検索
  90. 90. 実際のSQL SELECT * FROM demo_json WHERE properties->>”name” = “hoge”
  91. 91. 実際のSQL SELECT * FROM demo_json WHERE properties->>”name” = “hoge” JSONの値を指定して直接検索出来る
  92. 92. JSON型とJSONB型 INDEXを指定する
  93. 93. 実際のSQL CREATE INDEX   demo_json_index ON   demo_json   (properties->>'name');
  94. 94. 実際のSQL CREATE INDEX   demo_json_index ON   demo_json   (properties->>'name'); INDEX名
  95. 95. 実際のSQL CREATE INDEX   demo_json_index ON   demo_json   (properties->>'name'); INDEX名 対象テーブル
  96. 96. 実際のSQL CREATE INDEX   demo_json_index ON   demo_json   (properties->>'name'); INDEX名 対象テーブル 式を指定する
  97. 97. JSON型とJSONB型 銀の弾丸ではない(本日二度目
  98. 98. JSON型とJSONB型 制約を設けれない
  99. 99. JSON型とJSONB型 制約を設けれない ↓ 外部キーや一意制約がない
  100. 100. JSON型とJSONB型 データ登録のトレードオフ
  101. 101. JSON型とJSONB型 データ登録のトレードオフ ↓ 自由な保存   正しく守る
  102. 102. JSON型とJSONB型 クエリに対する制限
  103. 103. JSON型とJSONB型 クエリに対する制限 ↓ 集約関数などが使えない
  104. 104. JSON型とJSONB型 要件に合わせて選択肢を選ぶ
  105. 105. JSON型とJSONB型 まとめ 1 値で検索が出来る 2 値の検索でINDEXが使える 3 要件に合わせて選択肢を選ぶ
  106. 106. あじぇんだ 1 自己紹介 2 Window関数とマテビュー 3 外部データラッパ(FDW) 4 JSON型とJSONB型 5 まとめ
  107. 107. まとめ Webアプリケーションの複雑化
  108. 108. まとめ Webアプリケーションの複雑化 ↓ データ構造も複雑化
  109. 109. まとめ 柔軟で高速な検索が必要
  110. 110. まとめ 柔軟で高速な検索が必要 ↓ 運用では正しいデータの保存も重要
  111. 111. まとめ データベースを知ることが大事
  112. 112. まとめ PostgreSQLは Webにもマッチします
  113. 113. まとめ スタートアップに
  114. 114. まとめ リプレースに
  115. 115. まとめ 既存拡張に
  116. 116. まとめ PostgreSQL使ってみませんか?
  117. 117. ご静聴ありがとうございました。
  • JunUchino

    Feb. 3, 2017
  • takushimizu

    Jan. 27, 2016
  • HiromichiYukawa

    Dec. 5, 2015
  • KanSakamoto

    Nov. 21, 2015
  • orangeclover

    Nov. 20, 2015
  • tomoakio2

    Sep. 20, 2015
  • rzpqyo

    Sep. 5, 2015
  • toshiharada

    Sep. 5, 2015

OSC新潟の登壇資料です。 http://www.ospn.jp/osc2015-niigata/

Views

Total views

4,155

On Slideshare

0

From embeds

0

Number of embeds

1,469

Actions

Downloads

13

Shares

0

Comments

0

Likes

8

×