SlideShare a Scribd company logo
PostgreSQLで学ぶ
データベース技術
アプリ開発とデータベース
アプリ開発とPostgreSQL
第18回 中国地方DB勉強会 2016.11.26
NPO法人 日本PostgreSQLユーザ会
株式会社アシスト 喜田 紘介
自己紹介
Japan PostgreSQL User's Group 2
postgres=# ¥x auto
postgres=# SELECT * FROM “自己紹介”
postgres -# WHERE name = ‘喜田紘介’;
-[ RECORD 1 ]
名前 | 喜田 紘介
twitter | @kkkida_twtr
blog | http://kkida-galaxy.blogspot.jp/
所属1 | NPO法人 日本PostgreSQLユーザ会
所属2 | 株式会社 アシスト
仕事 | PostgreSQLを中心としたDB技術支援、教育、サポート、プリセールス
| 活動に従事している。最近は、商用DBとの互換に優れたPostgreSQLの
| 強化版「EDB Postgres」の検証、技術支援の確立、販促など。
| 国内でのPostgreSQL普及・促進を目指す、日本PostgreSQLユーザ会の
| 理事としても活動し、全国各地での講演、技術相談、イベントの開催
| などに楽しさを見出している。
予備1 | B’z好き。カラオケ好き。ダイビング始めました。マラソン、テニス。
予備2 | このテーブル設計はイケてない!注意!
PostgreSQLで学ぶデータベース技術
すべてのアプリ開発者に知ってほしい、データベースの
役割の大事なことをまとめました
データにまつわる面倒なことは、データベースに任せて
しまいましょう!
Japan PostgreSQL User's Group 3
アプリ開発とデータベース、アプリ開発とPostgreSQL
学習すること
 システムの中核を担うデータベース
 RDBMSが得意な処理、苦手な処理
 トランザクションを理解する
 PostgreSQLを選択する理由
目次
PostgreSQLで学ぶデータベース技術
すべてのアプリ開発者に知ってほしい、データベースの
役割の大事なことをまとめました
データにまつわる面倒なことは、データベースに任せて
しまいましょう!
Japan PostgreSQL User's Group 4
アプリ開発とデータベース、アプリ開発とPostgreSQL
学習すること
 システムの中核を担うデータベース
 RDBMSが得意な処理、苦手な処理
 トランザクションを理解する
 PostgreSQLを選択する理由
目次
この資料は、
http://kkida-galaxy.blogspot.jp/2016/11/chugokudb18.html
で公開しています。
「kkida-galaxy」でググってください
また、この内容は、
Web業界で働くためのオンライン動画学習サービス Schooで実施した、
「PostgreSQLで学ぶデータベース技術」の一部を再編したものです。
https://schoo.jp/class/3529
PostgreSQLで学ぶデータベース技術
プログラムとデータの分離
リレーショナルデータベースで、データを
「高速に返す」「維持する」「守る」
Japan PostgreSQL User's Group 5
アプリ開発とデータベース、アプリ開発とPostgreSQL
 システムの中核を担うデータベース
 RDBMSが得意な処理、苦手な処理
 トランザクションを理解する
 PostgreSQLを選択する理由
目次
プログラムとデータの分離
独自にデータを持つ場合 データベースで一元管理
Japan PostgreSQL User's Group 6
データベースによるデータ層の「抽象化」
My
Program
My Only Data
文字列 file配列
入力から
条件に合う
データを探す
計算して
(プログラム固有の処理)
画面を生成
My
Program
計算して
(プログラム固有の処理)
画面を生成
データベース
データベースに
問い合わせ
他の
プログラム
条件に合う
データを探して
返却
リレーショナルデータベースの機能
リレーショナルデータベース管理システム(RDBMS)
RDBMSの機能イメージ
Japan PostgreSQL User's Group 7
RDBMSにはこれだけ(こんなに)任せましょう!
RDBMS
PostgreSQL
SQLSQLRDBMSの
共通操作言語
同時実行の実現
不正アクセスの禁止
結果を高速に
返却する
データを
適切に維持
確定された
データを守る
リレーショナルデータベースの機能
RDBで行う「データ」の扱い
Japan PostgreSQL User's Group 8
プログラム側でこれらを実現するのは大変
結果を高速に
返却する
データを
適切に維持
確定された
データを守る
表形式のデータ
:
大量のデータから、条件に合う
データを効率の良い方法で検索
変更されるデータをチェックし、
誤ったデータが入ることを防ぐ
全てのデータはバックアップなど
様々な手段で保護され、あらゆる
障害から復旧できる
【参考】RDBとNoSQL
RDBのレプリケーション NoSQLでの例
Japan PostgreSQL User's Group 9
1筐体で「データを守る」ことがRDB本来の役目
Master Slave
複数台slaveで
参照負荷分散
RDBでは、
・トランザクションの実現
・SQL対応や正規化されたテーブル構造の維持
PG-
REX
死活監視や
障害時の切り替え
書き込みが順に伝搬するとして、n筐体から
応答があれば書き込みを成功とみなす。
参照時に最新データが見れるとは限らない。
このような構造の利点は、
・1台の障害による影響が少ない点
・ディスクに永続化したデータを持つ必要が
なく、メモリだけで高速に動作出来る点
(n台以上の同時多重障害でない場合に限る)
書き込み
成功
成功
PostgreSQLで学ぶデータベース技術
RDBでデータを高速に返却する
集合を扱うSQL / ifやloopで表現する他の言語
Japan PostgreSQL User's Group 10
アプリ開発とデータベース、アプリ開発とPostgreSQL
 システムの中核を担うデータベース
 RDBMSが得意な処理、苦手な処理
 トランザクションを理解する
 PostgreSQLを選択する理由
目次
RDBでデータを高速に返却する
条件にマッチするデータを最適な方法で検索
Japan PostgreSQL User's Group 11
利用者は欲しいもの(条件)を指定するだけ
RDBMS
PostgreSQL
SQLSQLRDBMSの共通操作言語
○○表の××の条件に
該当するデータ メモリを有効に使う
表のデータ量は?
インデックスはある?
インデックス使う?
JOINの順番は?
どうやってJOINするの?
条件に合うデータは何件?
:
他に選択肢はある?
どっちが早い?
SQL:RDBを操作する共通言語
集合を扱うSQL
Japan PostgreSQL User's Group 12
利用者は欲しいもの(条件)を指定するだけ
SELECT first_name,last_name
FROM customer
WHERE last_name = ‘Kida’;
customer
Kida Kosuke Kida Kosuke
Kida Yusuke
customer
・結果が何件あってもモレなく返却
・結果が何件になるか予測して、
もっとも効率の良い方法で探索
RDBが得意な処理
集合に対して関数を使う 他の集合を条件にする
Japan PostgreSQL User's Group 13
RDBが得意な処理=SQLで書ける処理
SELECT last_name,avg(age)
FROM customer
WHERE last_name = ‘Kida’;
customer
SELECT last_name,club_name
FROM customer
JOIN club
ON club.id = customer.club_id
WHERE last_name = ‘Kida’
AND club_name = ‘データベース愛好会’
customer
(参考)ifやloopで表現する他の言語
Japan PostgreSQL User's Group 14
<全データの件数を取得>
loop <件数>
if last_name = Kida
<値を配列に代入>
end loop
Kida Kosuke
Kida Yusuke
customer
<全データの件数を取得>
loop <件数>
if last_name = Kida
<値を配列1に代入>
end loop
<club表からpostgres愛好会のidを取得>
<配列1の件数を取得>
loop <件数>
if club_id = 500
<値を配列2に代入>
end_loop
customer
全件チェック1
全件チェック2
(参考)ifやloopで表現する他の言語
SQLが苦手なもの 例えば・・・
Japan PostgreSQL User's Group 15
複雑な条件分岐があって値を書き換えるような処理
沖縄ダイビングツアー
3泊4日 ○○円!
ツアーコード:xxxxxx
○日前までの予約で
20%off!
ダイビングショップ
A社とコラボで
該当店舗からの申し
込みで10%off
[今だけキャンペーン]
Webからの申し込み15%off
しかも専用アプリだとxxx
○名様以上で一緒に
申し込むと
1人目10%、2人目20%
3人目以降30%off!
PostgreSQLで学ぶデータベース技術
現実の処理をコンピュータで扱う
確定したデータを維持する
どのデータを最新とするか
【ハイレベル】 ACIDの原則
Japan PostgreSQL User's Group 16
アプリ開発とデータベース、アプリ開発とPostgreSQL
 システムの中核を担うデータベース
 RDBMSが得意な処理、苦手な処理
 トランザクションを理解する
 PostgreSQLを選択する理由
目次
トランザクションを理解する
現実の処理とコンピュータ上の数字の矛盾
Japan PostgreSQL User's Group 17
現実の処理をコンピュータで正しく扱う考え方
目をつけていたアイテムが
タッチの差で取られてしまった!
単なる数字上での話として扱うなら、
箱の中身がマイナスに!
・選ぶところから含めて、すべての
処理を早いもの勝ちで進める
・いったん投票のターンを設ける
など、方法はいろいろ
あげる もらう
「あげる」「もらう」は同時であり
現実世界で割り込まれることは無い
同時に他の人も操作していると
割り込みが発生
・「あげる」「もらう」は別々の更新
・「あげる」「もらう」が両方完了して
はじめて処理を成功とみなす
確定したデータを維持する
トランザクションを「完了」するCOMMIT
「破棄」するROLLBACK
Japan PostgreSQL User's Group 18
あげる、もらう でひとつの処理単位とみなし同時に確定
BEGIN;
SELECT * FROM 貯金;
UPDATE 貯金 SET 残高-1000
WHERE 名前 = Aさん;
UPDATE 貯金 SET 残高+1000
WHERE 名前 = Bさん;
COMMIT;
名前 残高
Aさん 5000
Bさん 1000
名前 残高
Aさん 4000
Bさん 1000
名前 残高
Aさん 4000
Bさん 2000
名前 残高
Aさん 4000
Bさん 2000
COMMITで確定
名前 残高
Aさん 5000
Bさん 1000
ROLLBACKで
BEGIN前まで戻す
どのデータを最新とみなすか
トランザクション内外でのデータの見え方
Japan PostgreSQL User's Group 19
全員が同じ箱の中身をみている・・・わけでない
BEGIN;
SELECT * FROM candy;
UPDATE candy SET 残り-1
WHERE 味 = レモン;
SELECT * FROM candy;
COMMIT;
味 残り
グレープ 10
レモン 1
味 残り
グレープ 10
レモン 0
SELECT * FROM candy;
SELECT * FROM candy;
SELECT * FROM candy;
味 残り
グレープ 10
レモン 1
味 残り
グレープ 10
レモン 1
味 残り
グレープ 10
レモン 0
割り込みをブロックする
行レベルロックで同時実行を実現
Japan PostgreSQL User's Group 20
更新がCOMMITされるまで別の更新をブロック
BEGIN;
SELECT * FROM candy;
UPDATE candy SET 残り-1
WHERE 味 = レモン;
SELECT * FROM candy;
COMMIT;
味 残り
グレープ 10
レモン 1
味 残り
グレープ 10
レモン 0
SELECT * FROM candy;
SELECT * FROM candy;
UPDATE candy SET 残り-1
WHERE 味 = レモン;
<待機>
error:マイナス値は登録できません
味 残り
グレープ 10
レモン 1
味 残り
グレープ 10
レモン 1
【ハイレベル】ACIDの原則
Japan PostgreSQL User's Group 21
トランザクションはACIDの原則に従う
Atomicity(原子性)
• 一連の処理をひとま
とめにし、それ以上
分解できない
• 同時にcommitまたは
rollbackされる
Consistency(整合性)
• 誤ったデータが入ることを
防ぐ
• 箱の中身はマイナスの個数
にはならない、など
Isolation(独立性)
• 実行中の処理が他のト
ランザクションに影響
を与えない
• 未確定のデータは他の
トランザクションから
見えない
Durability(永続性)
• 確定したトランザクション
の結果が守られる
• 障害時にバックアップから
復旧できる仕組みを実装
PostgreSQLで学ぶデータベース技術
大量のトラフィックをさばくwebサービス
複雑なSQLを賢く実行する業務システム
大量データを一気に読み込む分析システム
Japan PostgreSQL User's Group 22
アプリ開発とデータベース、アプリ開発とPostgreSQL
 システムの中核を担うデータベース
 RDBMSが得意な処理、苦手な処理
 トランザクションを理解する
 PostgreSQLを選択する理由
目次
PostgreSQLを選ぶ理由
RDBの得意分野 負荷分散レプリケーション
Japan PostgreSQL User's Group 23
大量のトラフィックをさばくwebサービスの場合
RDBMS
PostgreSQL
APサーバー
• 参照クエリが多数
• ほとんどのクエリが、
ユーザーIDをキーに
した一意検索
• メモリ上で処理
RDBの得意分野
PostgreSQL
Master
PostgreSQL
同期Slave1
PostgreSQL
非同期Slave2
APサーバー
• 参照クエリが多数
• 更新はマスターのみ
• 参照はスレーブで可能
PostgreSQLを選ぶ理由
豊富なSQL構文、拡張 高可用レプリケーション
Japan PostgreSQL User's Group 24
複雑なSQLを賢く実行する業務システム
RDBMS
PostgreSQL
APサーバー
• webと比較して、同時実行
は若干減
• 業務要件に従ってクエリの
パターンが多種多様
• 集計は扱うデータ量が増大
拡張データ型や
索引で高速に処理
PostgreSQL
Master
PostgreSQL
非同期Slave1
APサーバー
• システムダウンの影響が
大きい
• 堅牢かつ高速な復旧が
求められる
Window関数など
便利な構文に対応
高可用
クラスタ
ウェア
vip
【参考】
PG-REX
pgpool-II
PostgreSQLを選ぶ理由
パーティショニング パラレルクエリ
Japan PostgreSQL User's Group 25
大量データを一括で読み込む分析システム
RDBMS
PostgreSQL
APサーバー
• 同時実行は少数
• 過去数年分のデータを保管
しているようなシステム
• 直近xヶ月分を分析
• あらかじめテーブルを
パーティション分割
• I/Oを大幅に減らして
集計時間を削減
• 豊富な分析用SQL構文
や索引も活用
• 大規模表の読み取り、結合、
集約に利用できる
• 1 クエリを内部で複数並列
に分割して実行
• パーティショニングとの
併用で効果絶大
今秋リリース
Ver9.6の新機能
まとめ
アプリ層とDB層を意識し、データを正しく扱いましょう
様々なシステムでRDB、PostgreSQLが活躍する
Japan PostgreSQL User's Group 26
アプリ開発とデータベース、アプリ開発とPostgreSQL
DBが得意な処理は
どんどん任せる
SQL
集合に対する操作
データ層の高速化
トランザクション
同時実行
データの永続化
webアプリ 業務システム 分析システム
PGConf.Asia 2016
Japan PostgreSQL User's Group 27
アジア最大のPostgreSQL国際カンファレンスを日本で
日時 2016年12月2日(金)、12月3日(土)
Webサイト http://www.pgconf.asia/JP/
メインセッション
①トップ開発者が語る
PostgreSQL最新情報
②世界最大のB2Bマーケット
プレイス「Alibaba」の事例
多岐にわたるセッションを企画中
国内/海外事例
性能や運用の話
コミュニティ関連
他DBからの移行
新機能や拡張の
開発現場から
初級者向け
チュートリアル

More Related Content

PDF
PostgreSQLレプリケーション(pgcon17j_t4)
PDF
Chugokudb18_2
PDF
Oratopostgres-hiroshima
PDF
Jpug study-pq 20170121
PDF
Chugoku db 20th-postgresql-10-pub
PDF
Chugoku db 17th-lt-kly
PDF
[Postgre sql9.4新機能]レプリケーション・スロットの活用
PDF
Oss x user_meeting_6_postgres
PostgreSQLレプリケーション(pgcon17j_t4)
Chugokudb18_2
Oratopostgres-hiroshima
Jpug study-pq 20170121
Chugoku db 20th-postgresql-10-pub
Chugoku db 17th-lt-kly
[Postgre sql9.4新機能]レプリケーション・スロットの活用
Oss x user_meeting_6_postgres

What's hot (20)

PDF
Chugoku db 17th-postgresql-9.6
PDF
[9.5新機能]追加されたgroupbyの使い方
PDF
商用DBからPostgreSQLへ まず知っておいて欲しいまとめ
PDF
OSC北海道2014_JPUG資料
PDF
PostgreSQLでスケールアウト
PDF
Webで役立つRDBの使い方
PDF
[OSC2016沖縄]商用DBからPostgreSQLへの移行入門
PDF
Postgre sql9.3新機能紹介
PDF
JSONBはPostgreSQL9.5でいかに改善されたのか
PDF
Postgre sql update_20170310
PDF
JTF2021w F3 postgresql frontline
PDF
PostgreSQL10徹底解説
PDF
外部データラッパによる PostgreSQL の拡張
PDF
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
PDF
GresCubeで快適PostgreSQLライフ
PDF
PostgreSQLによるデータ分析ことはじめ
PDF
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
PDF
Jpug study-postgre sql-10-pub
PDF
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
PDF
シンプルでシステマチックな Oracle Database, Exadata 性能分析
Chugoku db 17th-postgresql-9.6
[9.5新機能]追加されたgroupbyの使い方
商用DBからPostgreSQLへ まず知っておいて欲しいまとめ
OSC北海道2014_JPUG資料
PostgreSQLでスケールアウト
Webで役立つRDBの使い方
[OSC2016沖縄]商用DBからPostgreSQLへの移行入門
Postgre sql9.3新機能紹介
JSONBはPostgreSQL9.5でいかに改善されたのか
Postgre sql update_20170310
JTF2021w F3 postgresql frontline
PostgreSQL10徹底解説
外部データラッパによる PostgreSQL の拡張
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
GresCubeで快適PostgreSQLライフ
PostgreSQLによるデータ分析ことはじめ
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
Jpug study-postgre sql-10-pub
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
シンプルでシステマチックな Oracle Database, Exadata 性能分析
Ad

Viewers also liked (17)

PDF
MySQLerの7つ道具
PDF
糖質とプログラミングと私
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
PostgreSQLアンチパターン
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PDF
すぐ始めれるクラウド
PPTX
Viewを使って開発を楽にする話
PDF
20150920 中国地方db勉強会
PPTX
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
PDF
MySQL のユーザー定義変数と RDB のココロ
PPT
意外と知らないFilemakerの世界
PDF
地方エンジニアがPostgreSQLを通じて成長した話
PDF
PostgreSQLの運用・監視にまつわるエトセトラ
PDF
まずやっとくPostgreSQLチューニング
PDF
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
PDF
Chugokudb study-20150131
PDF
中国地方Db勉強会
MySQLerの7つ道具
糖質とプログラミングと私
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PostgreSQLアンチパターン
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
すぐ始めれるクラウド
Viewを使って開発を楽にする話
20150920 中国地方db勉強会
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
MySQL のユーザー定義変数と RDB のココロ
意外と知らないFilemakerの世界
地方エンジニアがPostgreSQLを通じて成長した話
PostgreSQLの運用・監視にまつわるエトセトラ
まずやっとくPostgreSQLチューニング
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
Chugokudb study-20150131
中国地方Db勉強会
Ad

Similar to Chugokudb18_1 (20)

PDF
Jjugccc2017spring-postgres-ccc_m1
PDF
[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
PDF
データベースを使おう
PDF
20120405 setsunaセミナー
PDF
PostgreSQL9.3新機能紹介
PDF
20201102 postgresql unconference_debility
PDF
20120317 IT系勉強会 in 神戸
PDF
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
PPTX
ウェブから情報をあつめる
KEY
GrowthForecastことはじめ
PPTX
「機械学習とは?」から始める Deep learning実践入門
PDF
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
PDF
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
PPTX
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
PDF
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
PDF
ソーシャルゲーム案件におけるDB分割のPHP実装
PDF
[東京] JapanSharePointGroup 勉強会 #2
PDF
20171220_hbstudy80_pgstrom
PPTX
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PDF
めんどくさくない Scala #kwkni_scala
Jjugccc2017spring-postgres-ccc_m1
[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
データベースを使おう
20120405 setsunaセミナー
PostgreSQL9.3新機能紹介
20201102 postgresql unconference_debility
20120317 IT系勉強会 in 神戸
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
ウェブから情報をあつめる
GrowthForecastことはじめ
「機械学習とは?」から始める Deep learning実践入門
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
ソーシャルゲーム案件におけるDB分割のPHP実装
[東京] JapanSharePointGroup 勉強会 #2
20171220_hbstudy80_pgstrom
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
めんどくさくない Scala #kwkni_scala

Chugokudb18_1