SlideShare a Scribd company logo
データベース技術
第12回(2015.12.15)
115年12月15日火曜日
データベースとプログラム
•プログラムとデータの独立性
- SQLでデータベース処理を行うことにより、プログラ
ムとデータを分けて考えることが可能
- 生産性の向上につながる
データ
ベース
DBMSプログラム
SQL
215年12月15日火曜日
プログラミングインタフェース
•プログラムとデータベースの間でデータをやり
とりするもの
•API(Application Programming Interface)
- プログラムをアプリケーションプログラムと呼び、 
そのインタフェースなので、APIと呼ぶ
•APIの具体例
- Oracle:C言語から呼び出すOCI
- PostgreSQL:C言語から呼び出すlibpq
問題点:汎用性に欠ける
→データベースが変わるとプログラムの変更が必要
315年12月15日火曜日
プログラミングインタフェース
データ
ベース
ライブラリ RDBMS1
データ
ベース
ライブラリ RDBMS2
データ
ベース
ライブラリ RDBMS3
ソフトウェアC
クライアント
API①
ODBC
またはJDBC
API②
API③
- 製品が異なっても       
同じインタフェースを使用できる
415年12月15日火曜日
ODBCとJDBC
•ODBC(Open Database Connectivity)
- これに従いデータベースベンダがODBCドライバを提供
- ハードウェアやOSの違いを意識せずに済む
•JDBC
- Javaプログラミング用につくられたAPI
- JDBCを使うとデータベースを意識せずにアクセス可能
- JDBCの4つのタイプ
• ODBC Bridge Driver(TYPE 1)
• Native-API Partly-Java Driver(TYPE 2)
• Net Protocol All-Java Driver(TYPE 3)
• Native Protocol All-Java Driver(TYPE 4)
515年12月15日火曜日
Webとデータベースの例
•Twitter API
- Twitterの情報を利用することができる
- 例:ウィジェット
ここのソースコードを
Webサイトに貼付けると
Webサイトにツイートが表示される
615年12月15日火曜日
Excelとデータベース
•Excelでは、データベースからデータ取得可能
•外部データ参照機能を使う
•この機能では、ODBCが使われている
•例
- データベースにある売上データをExcelに取り出し、
グラフ化
715年12月15日火曜日
Microsoft Accessとデータベース
•小規模なデータベースシステム構築が可能
•利点
- フォーム機能を使って簡単にアプリケーションプログ
ラムが作成できる
- 細かい制御はVBA(Visual Basic Application)を利用
•Accessをフロントエンドとすることができる
- フロントエンド:画面の機能(Accessで作成)
- バックエンド:データベスの機能(Oracleなどの大規
模データベースを使用)
815年12月15日火曜日
APIの補足説明
•「データベースを意識せずにアクセス可能」
- データベースのベンダーを気にしなくてもOK
- データベースの細かな接続方法を気にしなくてもOK
•アプリケーションプログラムでやること
- データベースに接続する
- SQL文を組み立てる
- SQL文の実行結果を受け取り、操作する
※ソースコードで書く内容 = 人間がコマンドラインで行うこと
915年12月15日火曜日
•Javaのソースコード(前半)
JDBCの例(1)
import java.sql.*;
public class Fruits
{
public static void main(String args[])
{
try{
String drv = “com.mysql.jdbc.Driver”;
String url = “jdbc:mysql:/// fruitsdb”;
String usr = “”;
String pq = “”;
Class.forName(drv);
Connection cn = DriverManager.getConnection( url, usr, pw );
Statement st = cn.createStatement();
String qry = “SELECT * FROM fruits”;
ResultSet rs = st.executeQuery( qry );
SQL文を作成
SQL文を実行し、
結果を受け取る
データベースに接続
JDBCドライバを宣言
JDBCドライバを設定
接続先のデータベースを宣言
1015年12月15日火曜日
•Javaのソースコード(後半)
• ソースコードでは、JDBCを使うことを宣言するのみ
• その後はデータベースの種類を意識せずにSQL文と結果を操作している
JDBCの例(2)
ResultSetMetaData rm = rs.getMetaData();
int cnum = rm.getColumnCount();
while( rs.next() ){
for( int i =1; i <= cnum; i++; ){
System.out.print( rm.getColumnName( i ) + “--” + rs.getObject( i ) + “ “;
}
System.out.printlin( “”);
}
・・・省略
}
SQL文の実行結果を
1行ずつ表示
1115年12月15日火曜日
Rubyプログラムの補足
require "sqlite3"
db = SQLite3::Database.new("database.db")
sql = "create table Item (商品コード integer primary key, 商品名 text, 価格 int)"
db.execute(sql)
puts "Itemテーブルを作成しました。"
db.transaction do
	 sql = "insert into Item values (?, ?, ?)"

 db.execute(sql, 101, "メロン", 800)

 db.execute(sql, 102, "いちご", 150)

 db.execute(sql, 103, "リンゴ", 120)

 db.execute(sql, 104, "レモン", 200)
end
db.execute2("select * from Item") do | row |
	 puts row.join("t")
end
db.close
インスタンスの生成
db:インスタンス名
<インスタンスとは>
 ・プログラムを動かすための部品。 
 ・「オブジェクト」とも呼ばれる。
 ・インスタンスには、様々な「メソッド」
  が用意されている。
<メソッド>
 ・インスタンス自身に対する操作
 ・メソッドの使い方:「インスタンス名.メ
  ソッド名(引数)」
変数:値を覚えておく入れ物
変数
1215年12月15日火曜日
データベースの運用
•トランザクション機能
•同時実行制御
•セキュリティ
1315年12月15日火曜日
トランザクション機能(1)
•トランザクション
- データの登録や更新の1サイクルのこと
•トランザクション機能
- トランザクションを保証する機能
- データベースに下書きをし、矛盾がなければ更新する
- 処理の始めに「トランザクション開始」を宣言
- 処理の修了時に「トランザクション終了」を宣言
- トランザクション終了時にDB更新を行う
1415年12月15日火曜日
トランザクション機能(2)
データ
ベース
読み出し
書き込み
A
A
トランザクション
・データ登録
・データ更新
1515年12月15日火曜日
トランザクションの性質(1)
•データベースに矛盾が生じる可能性
- 多数のユーザによる利用
- トランザクションの実行中に障害が発生
•ACID属性(ACID properties)
- 矛盾を防ぐためにトランザクションに要求される性質
1615年12月15日火曜日
トランザクションの性質(1)
•ACID属性(ACID properties)
- 矛盾を防ぐためにトランザクションに要求される性質
性質 内容 意味
A(Atomicity) 原子性
トランザクションは、コミットかロールバックのいず
れかで終了しなければならない
C(Consistency) 一貫性
トランザクションを実行した時、データベースの一貫
性は損なわれない
I(Isolation) 独立性
トランザクションを並列的に処理した場合であって
も、逐次処理した場合と同一にならなければならない
D(Durability) 耐久性
完了したトランザクションの内容は、障害によって損
なわれない
1715年12月15日火曜日
原子性(Atomicity)
•トランザクションはコミットかロールバックで
終了する
- コミット(commit):トランザクション処理を確定
させるための指示
- ロールバック(rollback):トランザクション処理を
取り消すための指示
データ
ベース
A
A
コミット
データ
ベース
A
A
ロールバック
×
1815年12月15日火曜日
コミットとロールバック
•自動的に行われる場合
- データベースシステムで自動的に処理される
•明示的に発行する場合
- エラーの有無により、トランザクション処理を変更し
たい場合など
- SQL文:COMMIT文とROLLBACK文がある
COMMIT;
ROLLBACK;
1915年12月15日火曜日
一貫性(Consistency)(1)
•トランザクション操作の前後で矛盾が発生しない
•資源(resource)
- トランザクション操作の対象となる表や行の単位
•データベースの一貫性を保つとは
- トランザクションが同じ資源に並列的にアクセスして
も、矛盾がないようにすること
2015年12月15日火曜日
一貫性(Consistency)(2)
•更新の喪失(lost update)
- 一貫性が保たれない現象
- 例:りんごの数は何個?
りんご
30個
A
A
① 30個
+10個
④ 40個 りんご
40個?
B
B
+10個
② 30個
③ 40個
A、Bがそれぞれ10個足したら
りんごの数は50個になるはず
2115年12月15日火曜日
独立性(Isolation)
•直列可能(serializable)
- 複数のトランザクションが並列処理されても、これを
逐次処理した場合と同じ結果となること
•トランザクションの独立性
- スケジュールが直列可能であることを要求している
•スケジュールを直列可能とするために
- 同時実行制御が必要となる
2215年12月15日火曜日
同時実行制御
•データベースへのロック(lock)を使った制御
- 共有ロック(shared lock):データの読み出し時
- 排他ロック(exclusive lock):データの書き込み時
• 共有ロックがかかっているとき、他のトランザクションは共有ロックを 
かけられるが、排他ロックはかけられない
• 排他ロックがかかっているとき、共有ロックも排他ロックもかけられない
共有ロック 排他ロック
共有ロック
排他ロック
○ ×
× ×
ロックの両立関係
2315年12月15日火曜日
2相ロックで直列可能を保証
•2相ロック(two-phase locking)
- ロックの設定と解除に関する一定の規約のひとつ
- トランザクションをロックをかけていく相と、ロック
を解除していく相から構成する
LOCK A
LOCK B
READ A
READ B
WRITE A
WRITE B
UNLOCK A
UNLOCK B
2相ロックに従う場合
LOCK A
READ A
WRITE A
UNLOCK A
LOCK B
READ B
WRITE B
UNLOCK B
2相ロックに従わない場合
ロックをかける相
ロックを解除する相
ロックを全部かけ
終わる前にロック
を解除している
2415年12月15日火曜日
ロックの粒度(granularity)
•ロックをかける範囲のこと:表 単位で、行 単位で
•ロックの粒度を大きくする
- 1つのトランザクションがロックをかける回数が減る
• ロック管理の手間を減らせる => CPU負荷が減る
- ロックの解除を待つ時間が長くなる
• 同時に実行可能なトランザクションの数は減少
•ロックの粒度を小さくする
- 1つのトランザクションがロックをかける回数が増える
• ロック管理の手間が増える => CPU負荷が増える
- ロックの解除を待つ時間が短くなる
• 同時に実行かのうなトランザクションの数が増大
2515年12月15日火曜日
ロックによる制御の課題
•デッドロック(dead lock)
- 2つのトランザクションが,互いに相手の所有するロッ
クが解除されるのを待機して処理が進まなくなる状態
- 例:口座間の振込処理
口座番号 残高
1001 11,200
2002 2,100
トランザクション1 トランザクション2
①
口座番号1001の残高を
10,000減らす
③
口座番号2002の残高を
10,000増やす
②
口座番号2002の残高を
2,000減らす
④
口座番号1001の残高を
2,000増やす
ロック
ロック
×
×
2615年12月15日火曜日
その他の同時実行制御
•時刻印制御(timestamp control)
- アクセスするデータにタイムスタンプを与える
- より新しいタイムスタンプを持つトランザクションが
データを更新していた場合は、データの読み書きを許
可しない
•楽観的制御(optimistic control)
- とりあえず各トランザクションの読み書きを許可
- 書き込む時に初めて、他トランザクションによる更新
がなされていないかを確認する
- 他トランザクションが更新していたらロールバック
2715年12月15日火曜日

More Related Content

PDF
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
PDF
Excel 2016 データの取得と変換
PDF
データベース技術 11(Database 11)
PDF
リレーショナルデータベースとの上手な付き合い方 long version
PDF
データベースシステム論02 - データベースの歴史と今
PDF
20200629 データベース基礎~データベースの扱いとデータ設計~
PDF
TAM 新人ディレクター システムスキルアップ プログラム 第6回 「データベース」
PDF
20150217 イタンジプログラミング講座テキスト第3回
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
Excel 2016 データの取得と変換
データベース技術 11(Database 11)
リレーショナルデータベースとの上手な付き合い方 long version
データベースシステム論02 - データベースの歴史と今
20200629 データベース基礎~データベースの扱いとデータ設計~
TAM 新人ディレクター システムスキルアップ プログラム 第6回 「データベース」
20150217 イタンジプログラミング講座テキスト第3回

Similar to データベース技術 12(Database 12) (20)

PDF
データベースシステム論01 - ガイダンス
PDF
データベース09 - データベース設計
PPTX
ソフトウェアとは
PDF
ビジネスサイドが知っておくべきアプリケーションのデータ分析の話
PDF
データベース入門2
PDF
20130203 OSS-DB Exam Silver 技術解説無料セミナー
PDF
20130203 oss-db-lpi
PDF
Oracle Cloud Platform - クラクドにおける 新たなデータベース開発
PPTX
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
PDF
データベース技術 7(Database 7)
PDF
About NoSQL
PDF
データベース技術について
PPT
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
PDF
データベース入門1
PDF
データベース11 - データベースとプログラム
PDF
Not only sql _ 新卒エンジニア勉強会20130417
PDF
【より深く知ろう】活用最先端!データベースとアプリケーション開発をシンプルに、高速化するテクニック
PDF
実務で役立つデータベースの活用法
PDF
PerlとSQLのいろいろ
PDF
Chugokudb18_1
データベースシステム論01 - ガイダンス
データベース09 - データベース設計
ソフトウェアとは
ビジネスサイドが知っておくべきアプリケーションのデータ分析の話
データベース入門2
20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 oss-db-lpi
Oracle Cloud Platform - クラクドにおける 新たなデータベース開発
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
データベース技術 7(Database 7)
About NoSQL
データベース技術について
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
データベース入門1
データベース11 - データベースとプログラム
Not only sql _ 新卒エンジニア勉強会20130417
【より深く知ろう】活用最先端!データベースとアプリケーション開発をシンプルに、高速化するテクニック
実務で役立つデータベースの活用法
PerlとSQLのいろいろ
Chugokudb18_1
Ad

More from Yuka Obu (17)

PDF
データベース技術 14(Database 14)
PDF
データベース技術 13(Database 13)
PDF
データベース技術 10(Database 10)
PDF
データベース技術 9(Database 9)
PDF
データベース技術 8(Database_8)
PDF
データベース技術 6(Database_6)
PDF
データベース技術 5(Database_5)
PDF
データベース技術 4(Database_4)
PDF
データベース技術 3(Database_3)
PDF
データベース技術 2(Database_2)
PDF
データベース技術 1(Database_1)
PDF
ソーシャルメディアワークショップ1
PDF
企業によるソーシャルアカウント運用のために
PDF
Sns 2
PDF
Twitter in Hitachiohta 3
PDF
Twitter in Hitachiohta 2
PDF
Twitter in Hitachiohta 1
データベース技術 14(Database 14)
データベース技術 13(Database 13)
データベース技術 10(Database 10)
データベース技術 9(Database 9)
データベース技術 8(Database_8)
データベース技術 6(Database_6)
データベース技術 5(Database_5)
データベース技術 4(Database_4)
データベース技術 3(Database_3)
データベース技術 2(Database_2)
データベース技術 1(Database_1)
ソーシャルメディアワークショップ1
企業によるソーシャルアカウント運用のために
Sns 2
Twitter in Hitachiohta 3
Twitter in Hitachiohta 2
Twitter in Hitachiohta 1
Ad

Recently uploaded (10)

PDF
3_「本当の『悪者』って何?」鷗友学園女子中学校_福島 雪乃さんinspirehigh.pdf
PDF
5_「AIと仲良くなるには?」日本大学東北高等学校南梨夢乃さんinspirehigh.pdf
PDF
9_前田音葉さん:「Yakushima Islandってなんか変じゃない?」.pdf
PDF
6_「老いることは不幸なこと?」植草学園大学附属高等学校森 珠貴さんinspirehigh.pdf
PDF
7_「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」明治大学付属中野八王子中学校宮本ゆりかさん.pdf
PDF
My Inspire High Award 2024(岡田秀幸).pptx.pdf
PDF
「なぜ、好きなことにいつかは飽きるの?」大塚莉子 - My Inspire High Award 2024.pdf
PPT
日本語test日本語test日本語test日本語test日本語test日本語test.ppt
PDF
8_「世の中の流行はどのようにして生まれるのか」学校法人聖ドミニコ学園竹野はるいpptx.pdf
PDF
外国人が日本のテーブルマナーに驚く理由は?_公文国際学園高等部 角田 恵梨佳さん
3_「本当の『悪者』って何?」鷗友学園女子中学校_福島 雪乃さんinspirehigh.pdf
5_「AIと仲良くなるには?」日本大学東北高等学校南梨夢乃さんinspirehigh.pdf
9_前田音葉さん:「Yakushima Islandってなんか変じゃない?」.pdf
6_「老いることは不幸なこと?」植草学園大学附属高等学校森 珠貴さんinspirehigh.pdf
7_「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」明治大学付属中野八王子中学校宮本ゆりかさん.pdf
My Inspire High Award 2024(岡田秀幸).pptx.pdf
「なぜ、好きなことにいつかは飽きるの?」大塚莉子 - My Inspire High Award 2024.pdf
日本語test日本語test日本語test日本語test日本語test日本語test.ppt
8_「世の中の流行はどのようにして生まれるのか」学校法人聖ドミニコ学園竹野はるいpptx.pdf
外国人が日本のテーブルマナーに驚く理由は?_公文国際学園高等部 角田 恵梨佳さん

データベース技術 12(Database 12)