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

27
データベース技術 12回(2015.12.151 151215日火曜日

Upload: yuka-obu

Post on 19-Jan-2017

217 views

Category:

Education


0 download

TRANSCRIPT

Page 1: データベース技術 12(Database 12)

データベース技術第12回(2015.12.15)

115年12月15日火曜日

Page 2: データベース技術 12(Database 12)

データベースとプログラム•プログラムとデータの独立性

- SQLでデータベース処理を行うことにより、プログラムとデータを分けて考えることが可能

-生産性の向上につながる

データベース

DBMSプログラム SQL

215年12月15日火曜日

Page 3: データベース技術 12(Database 12)

プログラミングインタフェース•プログラムとデータベースの間でデータをやりとりするもの•API(Application Programming Interface)

-プログラムをアプリケーションプログラムと呼び、 そのインタフェースなので、APIと呼ぶ

•APIの具体例- Oracle:C言語から呼び出すOCI- PostgreSQL:C言語から呼び出すlibpq問題点:汎用性に欠ける→データベースが変わるとプログラムの変更が必要

315年12月15日火曜日

Page 4: データベース技術 12(Database 12)

プログラミングインタフェース

データベース

ライブラリ RDBMS1

データベース

ライブラリ RDBMS2

データベース

ライブラリ RDBMS3

ソフトウェアC

クライアントAPI①

ODBCまたはJDBC API②

API③

-製品が異なっても       同じインタフェースを使用できる

415年12月15日火曜日

Page 5: データベース技術 12(Database 12)

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日火曜日

Page 6: データベース技術 12(Database 12)

Webとデータベースの例•Twitter API

- Twitterの情報を利用することができる

-例:ウィジェット

ここのソースコードをWebサイトに貼付けるとWebサイトにツイートが表示される

615年12月15日火曜日

Page 7: データベース技術 12(Database 12)

Excelとデータベース•Excelでは、データベースからデータ取得可能

•外部データ参照機能を使う

•この機能では、ODBCが使われている

•例-データベースにある売上データをExcelに取り出し、グラフ化

715年12月15日火曜日

Page 8: データベース技術 12(Database 12)

Microsoft Accessとデータベース•小規模なデータベースシステム構築が可能•利点

-フォーム機能を使って簡単にアプリケーションプログラムが作成できる

-細かい制御はVBA(Visual Basic Application)を利用

•Accessをフロントエンドとすることができる-フロントエンド:画面の機能(Accessで作成)-バックエンド:データベスの機能(Oracleなどの大規模データベースを使用)

815年12月15日火曜日

Page 9: データベース技術 12(Database 12)

APIの補足説明•「データベースを意識せずにアクセス可能」

-データベースのベンダーを気にしなくてもOK

-データベースの細かな接続方法を気にしなくてもOK

•アプリケーションプログラムでやること-データベースに接続する

- SQL文を組み立てる

- SQL文の実行結果を受け取り、操作する※ソースコードで書く内容 = 人間がコマンドラインで行うこと

915年12月15日火曜日

Page 10: データベース技術 12(Database 12)

•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日火曜日

Page 11: データベース技術 12(Database 12)

•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日火曜日

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

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日火曜日

Page 13: データベース技術 12(Database 12)

データベースの運用•トランザクション機能

•同時実行制御

•セキュリティ

1315年12月15日火曜日

Page 14: データベース技術 12(Database 12)

トランザクション機能(1)•トランザクション

-データの登録や更新の1サイクルのこと

•トランザクション機能-トランザクションを保証する機能

-データベースに下書きをし、矛盾がなければ更新する

-処理の始めに「トランザクション開始」を宣言

-処理の修了時に「トランザクション終了」を宣言

-トランザクション終了時にDB更新を行う1415年12月15日火曜日

Page 15: データベース技術 12(Database 12)

トランザクション機能(2)

データベース

読み出し

書き込み

A

A

トランザクション・データ登録・データ更新

1515年12月15日火曜日

Page 16: データベース技術 12(Database 12)

トランザクションの性質(1)•データベースに矛盾が生じる可能性

-多数のユーザによる利用-トランザクションの実行中に障害が発生

•ACID属性(ACID properties)-矛盾を防ぐためにトランザクションに要求される性質

1615年12月15日火曜日

Page 17: データベース技術 12(Database 12)

トランザクションの性質(1)•ACID属性(ACID properties)

-矛盾を防ぐためにトランザクションに要求される性質

性質 内容 意味

A(Atomicity) 原子性トランザクションは、コミットかロールバックのいずれかで終了しなければならない

C(Consistency) 一貫性トランザクションを実行した時、データベースの一貫性は損なわれない

I(Isolation) 独立性トランザクションを並列的に処理した場合であっても、逐次処理した場合と同一にならなければならない

D(Durability) 耐久性完了したトランザクションの内容は、障害によって損なわれない

1715年12月15日火曜日

Page 18: データベース技術 12(Database 12)

原子性(Atomicity)•トランザクションはコミットかロールバックで終了する-コミット(commit):トランザクション処理を確定させるための指示

-ロールバック(rollback):トランザクション処理を取り消すための指示

データベース

A

Aコミット

データベース

A

Aロールバック×

1815年12月15日火曜日

Page 19: データベース技術 12(Database 12)

コミットとロールバック•自動的に行われる場合

-データベースシステムで自動的に処理される

•明示的に発行する場合-エラーの有無により、トランザクション処理を変更したい場合など

- SQL文:COMMIT文とROLLBACK文がある

COMMIT;

ROLLBACK;

1915年12月15日火曜日

Page 20: データベース技術 12(Database 12)

一貫性(Consistency)(1)•トランザクション操作の前後で矛盾が発生しない

•資源(resource)-トランザクション操作の対象となる表や行の単位

•データベースの一貫性を保つとは-トランザクションが同じ資源に並列的にアクセスしても、矛盾がないようにすること

2015年12月15日火曜日

Page 21: データベース技術 12(Database 12)

一貫性(Consistency)(2)•更新の喪失(lost update)

-一貫性が保たれない現象-例:りんごの数は何個?

りんご30個

A

A

① 30個

+10個

④ 40個 りんご40個?

B

B

+10個

② 30個

③ 40個A、Bがそれぞれ10個足したらりんごの数は50個になるはず

2115年12月15日火曜日

Page 22: データベース技術 12(Database 12)

独立性(Isolation)•直列可能(serializable)

-複数のトランザクションが並列処理されても、これを逐次処理した場合と同じ結果となること

•トランザクションの独立性-スケジュールが直列可能であることを要求している

•スケジュールを直列可能とするために-同時実行制御が必要となる

2215年12月15日火曜日

Page 23: データベース技術 12(Database 12)

同時実行制御•データベースへのロック(lock)を使った制御

-共有ロック(shared lock):データの読み出し時-排他ロック(exclusive lock):データの書き込み時

• 共有ロックがかかっているとき、他のトランザクションは共有ロックを かけられるが、排他ロックはかけられない

• 排他ロックがかかっているとき、共有ロックも排他ロックもかけられない

共有ロック 排他ロック

共有ロック

排他ロック

○ ×× ×

ロックの両立関係

2315年12月15日火曜日

Page 24: データベース技術 12(Database 12)

2相ロックで直列可能を保証•2相ロック(two-phase locking)

-ロックの設定と解除に関する一定の規約のひとつ-トランザクションをロックをかけていく相と、ロックを解除していく相から構成する

LOCK ALOCK BREAD AREAD BWRITE AWRITE BUNLOCK AUNLOCK B

2相ロックに従う場合LOCK A READ AWRITE AUNLOCK ALOCK BREAD BWRITE BUNLOCK B

2相ロックに従わない場合

ロックをかける相

ロックを解除する相

ロックを全部かけ終わる前にロックを解除している

2415年12月15日火曜日

Page 25: データベース技術 12(Database 12)

ロックの粒度(granularity)•ロックをかける範囲のこと:表 単位で、行 単位で•ロックの粒度を大きくする

- 1つのトランザクションがロックをかける回数が減る• ロック管理の手間を減らせる => CPU負荷が減る

-ロックの解除を待つ時間が長くなる• 同時に実行可能なトランザクションの数は減少

•ロックの粒度を小さくする- 1つのトランザクションがロックをかける回数が増える

• ロック管理の手間が増える => CPU負荷が増える

-ロックの解除を待つ時間が短くなる• 同時に実行かのうなトランザクションの数が増大

2515年12月15日火曜日

Page 26: データベース技術 12(Database 12)

ロックによる制御の課題•デッドロック(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日火曜日

Page 27: データベース技術 12(Database 12)

その他の同時実行制御•時刻印制御(timestamp control)

-アクセスするデータにタイムスタンプを与える-より新しいタイムスタンプを持つトランザクションがデータを更新していた場合は、データの読み書きを許可しない

•楽観的制御(optimistic control)-とりあえず各トランザクションの読み書きを許可-書き込む時に初めて、他トランザクションによる更新がなされていないかを確認する

-他トランザクションが更新していたらロールバック2715年12月15日火曜日