データベースでは、作業中に他の人と矛盾が生じないよう、「排他制御」が働いています。
例えば、誰かが「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