6. プログラムとデータの分離
独自にデータを持つ場合 データベースで一元管理
Japan PostgreSQL User's Group 6
データベースによるデータ層の「抽象化」
My
Program
My Only Data
文字列 file配列
入力から
条件に合う
データを探す
計算して
(プログラム固有の処理)
画面を生成
My
Program
計算して
(プログラム固有の処理)
画面を生成
データベース
データベースに
問い合わせ
他の
プログラム
条件に合う
データを探して
返却
7. プログラムとデータの分離
独自にデータを持つ場合 データベースで一元管理
Japan PostgreSQL User's Group 7
データベースによるデータ層の「抽象化」
My
Program
My Only Data
文字列 file配列
入力から
条件に合う
データを探す
計算して
(プログラム固有の処理)
画面を生成
My
Program
計算して
(プログラム固有の処理)
画面を生成
データベース
データベースに
問い合わせ
他の
プログラム
条件に合う
データを探して
返却
Java Program
JVM
OS
SQL
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、・・・・
17. PostgreSQLを選ぶ理由
多数の結果を扱うSQL
表の大部分を扱う場合は全件取得
少数行を取得するSQL
索引で欲しいデータのみを特定
Japan PostgreSQL User's Group 17
複雑なロジックを賢く実行する Java + PostgreSQL
user表
article表
ユーザ名:kkida
ユーザID:2303
user表
article表
カテゴリ:java
ユーザID:
0024、0598、
0883、1109、
1188、2239、
2303、・・・・
article表のデータ分布
kkida
soudai
other
kkidaは全体の数%にも
満たないので目的の行に
絞ったアクセスが効率的
article表のデータ分布
java
other
javaは全体の数十%に
あたるので全件取得した
後で絞り込むほうが良い