データベース管理におけるトランザクションと排他制御
本日、2投稿目となります!
今回の内容は、勉強する中で非常に重要な観点だった為、
自分用メモの意味でもブログに残しておこうと思いました。
データベースの管理は、Webエンジニアになるにあたり必須観点です。
考察するに、以下のような情報管理が必要になるからです。
・Webアプリを利用していただくユーザーの管理
・サービス(商品、記事など)ごとの管理
・管理者権限と一般ユーザー権限管理など
そのようなデータベース管理において、
今回は、アプリ実務未経験ですが、データ管理者観点の基礎内容を纏めてみました。
(違うよ!実務はこうするよ!などご意見いただけるとありがたいです汗)
・トランザクション
データベース処理における「一連の処理を一まとめにしたもの」
・排他制御
処理中のデータをロックして、他の人が書き込みできないようにする
-> データの不整合が生じないようにする
*共有ロック
他のユーザーは、データを読み込み可能:書き込み不能
*専有ロック
他のユーザーは、データを読み込み不能:書き込み不能
複数の処理を実行する際に、お互いにデータロックして処理待ち状態になること
この場合は、処理をKillしなければならない。
トランザクション1
処理1:データAにアクセス(ロック)
処理2:データBにアクセス(ロック中の為、解除待ち)
トランザクション2
処理1:データBにアクセス(ロック)
処理2:データAにアクセス(ロック中の為、解除待ち)
・ACID特性
Atomicity(原子性) :全て実行されるか、何も実行されないか
Consistency(一貫性):中身に矛盾がないこと
Isolation(隔離性) :複数の処理を実行しても相互影響しないこと
Durability(耐久性) :更新結果が変わらないこと
障害が発生しても内容が消失しないこと
技術内容の発信において、色々な方のご意見いただけると嬉しいです。
間違っている点など、ご指摘などもあれば、よろしくお願いします。
最後まで読んでいただき、ありがとうございました!