More Related Content Similar to Jjugccc2017spring-postgres-ccc_m1 (20) More from Kosuke Kida (8) Jjugccc2017spring-postgres-ccc_m12. 自己紹介
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 | このテーブル設計はイケてない!注意!
4. DBAからDeveloperの皆様へ
Japan PostgreSQL User's Group 4
知ってほしい事、聞いてみたい事を持ってきました!
データベースに関わるメンバーの役割
アプリ開発者(Developer)
・データベースの利用者
・プログラム(SQL)を書く
・パフォーマンスの改善
データベース管理者(DBA)
Database Administrator
・データベースの運用管理を担当
・DBの安定稼働を使命とする
・プログラムを書かない
・運用管理に必要なSQLは書く
・OSレベルの情報も見る
・必要に応じてメンテナンス操作を実施
・オペレーター向け手順書の整備
オペレーター
・手順書に従って各種対応を行う
・データベースへの限られた操作
セキュリティ管理者
・データベースには
アクセスできない
・DBAや開発者による不正な
操作がないことを確認する
・監査情報に対する権限
7. プログラムとデータの分離
独自にデータを持つ場合 データベースで一元管理
Japan PostgreSQL User's Group 7
データベースによるデータ層の「抽象化」
My
Program
My Only Data
文字列 file配列
入力から
条件に合う
データを探す
計算して
(プログラム固有の処理)
画面を生成
My
Program
計算して
(プログラム固有の処理)
画面を生成
データベース
データベースに
問い合わせ
他の
プログラム
条件に合う
データを探して
返却
Java Program
JVM
OS
SQL
9. プログラムからDBを使う
データベース製品の差異を吸収するJDBC
Japan PostgreSQL User's Group 9
JavaではJDBCドライバを経由し、SQLを直接記述
RDBMSAPサーバー
close()
getConnection( )
JDBCドライバが提供する
データベース操作クラス
executeQuery( SELECT * FROM ~; )
SQLを自由に記述
ORM
処理に必要なテーブルの準備や、SQLを含めた
データベース操作までを全てパッケージング
JDBCで標準化されているため
DB製品によらず共通
SQLで標準化されているため
DB製品によらず共通
ただし、DB製品をちゃんと
勉強すると高性能・バグを防ぐ
SQLを自作することができる。
開発フレームワークで実装。
アプリ開発者目線では開発を
効率化できるが、データベース
層の最適化とは縁遠い
Java Program
JVM
SQL
11. なぜデータベース?
Japan PostgreSQL User's Group 11
アプリ開発者
(Developer)
データベース管理者
(DBA)
Database Administrator
Java x級
PM
リーダー
データベーススペシャリスト
・データベースだけど完全に
開発者向けの内容
・逃げ恥 的な
ベンダー資格
(Oracle Masterなど)
これといった
上位資格なし
だけど現場で重宝される
エキスパート
インフラ
全般
現場で重宝されるエキスパートを目指せる
14. 業務システムに求められることは?
業務システムwebアプリ
Japan PostgreSQL User's Group 14
複雑なロジックを賢く実行する Java + PostgreSQL
利用傾向
・参照が多数
・ユーザー数は数万~規模
アプリケーションの特徴
ユーザIDでログインし、個人の
情報を見せる利用シーンを想定
提供する機能はユーザー目線に
絞り、1ボタン=1機能なイメージ
利用傾向
・アクセス傾向は業務次第
・ユーザー数は数百規模
アプリケーションの特徴
業務全般に関わる複雑な条件で
検索、更新を行う
機能は業務遂行に関する全てを
備えており、タブ毎に全く違う
機能が統合されている
単純な機能、UIに秀でた
Webアプリをサッと作るなら
LL系かな~
業務要件に沿った様々な機能
(ビジネスロジック)の実装
JavaEEかな!
15. 業務システムに求められるデータベースは?
業務システムwebアプリ
Japan PostgreSQL User's Group 15
複雑なロジックを賢く実行する Java + PostgreSQL
利用傾向
・参照が多数
・ユーザー数は数万~規模
アプリケーションの特徴
ユーザIDでログインし、個人の
情報を見せる利用シーンを想定
提供する機能はユーザー目線に
絞り、1ボタン=1機能なイメージ
利用傾向
・アクセス傾向は業務次第
・ユーザー数は数百規模
アプリケーションの特徴
業務全般に関わる複雑な条件で
検索、更新を行う
機能は業務遂行に関する全てを
備えており、タブ毎に全く違う
機能が統合されている
大量の同時アクセスをさばき、
クエリのパターンは単純。
MySQLで高速化に命かける!
画面の数≒テーブル数=JOIN数
データの種類は?量は?
よし、PostgreSQLでいこう
16. PostgreSQLを選ぶ理由
多数の結果を扱うSQL少数行を取得するSQL
Japan PostgreSQL User's Group 16
複雑なロジックを賢く実行する Java + PostgreSQL
ユーザ名を条件に、ユーザが
書いたブログ記事を検索
→多くても数百件程度のヒット
SELECT xxxx FROM article
WHERE user_id
IN ( SELECT user_id
FROM user
WHERE user_name = ‘kkida’ );
user表
article表
ユーザ名:kkida
ユーザID:2303
ユーザが属するカテゴリを条件に、
そのカテゴリのブログ更新頻度を
分析する
→数万件~の結果を元に集計
SELECT xxxx FROM article
WHERE user_id
IN ( SELECT user_id
FROM user
WHERE category= ‘java’ );
user表
article表
カテゴリ:java
ユーザID:
0024、0598、
0883、1109、
1188、2239、
2303、・・・・
18. 業務システムに求められるデータベースは?
業務システムwebアプリ
Japan PostgreSQL User's Group 18
複雑なロジックを賢く実行する Java + PostgreSQL
利用傾向
・参照が多数
・ユーザー数は数万~規模
アプリケーションの特徴
検索の種類が限られる
→どのデータベースであっても
索引チューニング次第
利用傾向
・アクセス傾向は業務次第
・ユーザー数は数百規模
アプリケーションの特徴
多機能なアプリケーション
→表の数が多く、表内の
データの分布パターンが
業務によって異なる
どのデータベースでも良い
MySQLはスレッドモデルで動作
→同時実行性が高く、アクセス数
多いWebサービス等では有利
PostgreSQLは、データ分布まで
考慮した最適なJOINを行う
→どんな業務(≒アプリケーションの機能)
に対しても現実的な解をデータベース側に
任せることができる
19. PostgreSQLを選ぶ理由
カテゴリが1つとは限らない場合
地理データの格納
Japan PostgreSQL User's Group 19
業務データに応じた最適なデータ型を選択する
SELECT xxxx FROM article
WHERE user_id
IN ( SELECT user_id
FROM user
WHERE category= ‘java’ );
得意分野
■java
■PostgreSQL
□MySQL
□Oracle
JSONデータ型を利用
・データ入力時のJSONフォーマットチェック
・categoryの”要素にjavaを含む” 検索
(≠B-tree索引)
PostGIS拡張
・座標、線分、ポリゴンなどの独自データ型
・地理データを扱う関数と索引
(半径1km以内のスポットを検索 など)
CREATE TABLE user(
user_id BIGINT primary key
, user_name VARCHAR notnull
, category JSONB )
CREATE INDEX user_category・・・
USING gin
id name category
1234 kkida { lang:java
db :PostgreSQL }
1235 soudai { lang :php
db :PostgreSQL }
22. DBAからDeveloperの皆様へ
Japan PostgreSQL User's Group 22
知ってほしい事、聞いてみたい事を持ってきました!
データベースに関わるメンバーの役割
アプリ開発者(Developer)
・データベースの利用者
・プログラム(SQL)を書く
・パフォーマンスの改善
データベース管理者(DBA)
Database Administrator
・データベースの運用管理を担当
・DBの安定稼働を使命とする
・プログラムを書かない
・運用管理に必要なSQLは書く
・OSレベルの情報も見る
・必要に応じてメンテナンス操作を実施
・オペレーター向け手順書の整備
オペレーター
・手順書に従って各種対応を行う
・データベースへの限られた操作
セキュリティ管理者
・データベースには
アクセスできない
・DBAや開発者による不正な
操作がないことを確認する
・監査情報に対する権限
24. データベース管理者(DBA)
Japan PostgreSQL User's Group 24
システムの安定稼働を支えるデータベースのスペシャリスト
データベース管理業務
稼動状態の監視
死活監視
ログ監視
OSレベルの監視
パフォーマンス監視
メンテナンス操作
表や索引のメンテナンス
格納領域の管理
システム統計情報の管理
オプティマイザ統計の管理
バックアップ管理
バックアップの取得
バックアップ世代管理
リストア・リカバリ計画
リカバリ手順の作成
障害復旧
各種障害への対応
オペレーション
起動・停止
パラメータ検討・設定
DBサーバーの構築
27. DBチューニング
もっと相談するなら
Japan PostgreSQL User's Group 27
DBAはこんなことをします。
○○システムで、こういうデータを
xxxな処理で使いたいです~
更新量多そうですね。xxxな
チューニングを考えましょう!
設計段階
アプリの処理とは無関係に
全体的にもっさりする時間帯があって。
バックグラウンドの処理(チェック
ポイントやVACUUM)が上手く
流れているか、ログを確認します。
本番稼働中 (個別最適の検討が必要なケース)
サーバースペックは同時ユーザー数を
考慮してxxx程度積むと良いかも
過去実績との比較
パラメータ検討
更新テーブルの
個別設計
本当にアプリは無関係かな?
OSの稼働状況
PostgreSQLのログ
確かに毎日x時頃に、
悪い状態になってる
む、これは!!!
29. SQLチューニング
悪いSQLの特定 → チューニング対象の決定
データベース側で実行されたSQLをログに吐く機能
それなりにシステム負荷が高い
アプリ側の協力をもって迅速に特定したい
インデックスを貼ることが最良とは限らない
データ量
処理内容
SQLを書きなおす余地はある?
Japan PostgreSQL User's Group 29
DBAはこんなことをします。
悪くなったキッカケは?
何時頃とか、
法則性はある?
開発環境は
どの程度信じられる?
31. なぜデータベース?
Japan PostgreSQL User's Group 31
アプリ開発者
(Developer)
データベース管理者
(DBA)
Database Administrator
Java x級
PM
リーダー
データベーススペシャリスト
・データベースだけど完全に
開発者向けの内容
・逃げ恥 的な
ベンダー資格
(Oracle Masterなど)
これといった
上位資格なし
だけど現場で重宝される
エキスパート
インフラ
全般
現場で重宝されるエキスパートを目指せる