[記事公開日]2015/01/15
[最終更新日]2016/11/29

基本情報技術者試験 8-5(排他制御)

 

 

 

データベースでは、作業中に他の人と矛盾が生じないよう、「排他制御」が働いています。

 

例えば、誰かが「A10番」の席を予約したのに、同時に誰かが「A10番」を予約してしまう・・・なんてことがあってはいけません。

 

『共有ロックのあとに、共有ロックならできる』ということだけを覚えましょう。

 

共有ロックのあとに、占有ロックならできる・・?

 

いえ、できません。

 

◆共有ロック

共有ロックされたあとは共有ロックのみできる。

共有ロックされている間は、読み取りのみできる

 

データの編集はできない。

 

「A10番」の予約ページにはいくことができますが、予約ボタンは押せません。

 

◆占有ロック

占有ロックされたあとは読み取りも書き込みもできない

 

「A10番」の予約ページには、いくこともできません。

 

◆まとめ

共有ロック→共有ロック=できる

 

共有ロック→占有ロック=できない(間違えやすい!)

占有ロック→共有ロック=できない

占有ロック→占有ロック=できない

 

◆デットロック

お互いのロック解除待ち。

 

AくんはCさんに告白しようと思っているけど、BくんCさんに告白するらしいからそれを待っている。BくんもCさんに告白したいけど、Aくんが先に告白を待っている、そんな状態。

 

◆集中型のDB

コミットメント制御

更新(成功・失敗)により整合性を保つ。

 

※成功=コミット

※失敗=ロールバック

 

◆分散型のDB

処理はあえてコミット・ロールバックの中間でいる。

片方がコミットできたら、もう片方もコミットする。

中途半端がない。

 

◆トランザクション処理

→データベースへの操作(処理)を、一言で『トランザクション処理』といいます。基本的にはこの用語で解説されますので、覚えておくように!

 

◆ACID特性(アシッド特性)

※めちゃめちゃでる!!

 

信頼性のあるトランザクションシステム(データベース)が持つべき要素。

 

Atomicity(原子性)、Consistency(一貫性)、Isolation(独立性)、Durability(耐久性)の頭文字である。

 

 

Atomicity(原子性)

→”成功”か”失敗”で終了すること。

 

たとえば、A銀行からB銀行に1万円送金したのに、A銀行の残高は減り、B銀行の残高は変わっていない・・・なんてことがないようにします。もしも途中でシステム的なエラーが発生しても、それは”失敗”として、その操作は初めから無かったことにします。A銀行の残高が減り、B銀行の残高が増えた時点で、トランザクション処理を”成功”として終了させます。そうすることでデータの矛盾を回避します。

 

Consistency(一貫性)

→処理結果に矛盾がないこと。矛盾が生じるようならエラーにしてしまう。

 

Isolation(独立性)

→トランザクション処理は外部から隠蔽(見えない)され、処理結果が他に影響を与えることはない。『排他制御』もこの独立性を保障するといえます。

 

Durability(耐久性)

→処理結果はきちんとデータとして保存されること。ネットワークのトラブルで、データに変更が加えられてしまったのではたまりません。データはデータをしてきちんと保障されています。

 

こんなACID特性がデータベースには必要です。

 

単語と、その意味がごちゃ混ぜにならないようにしましょう。

 

 

以上です。

 

 

yamatunes