どうも初めまして!
最近基本情報技術者の資格取得に向けて勉強中な駆け出しエンジニアのワカです。
#■この記事を書こうと思ったきっかけ
最近書籍を購入して勉強しているのですが、暗記ばかりでなかなか身にならないと思いました。
そこで基本情報に書かれている内容を自分なりに解釈したものをここに備忘録として書き残すことにしました。
そうすれば手も動かせるし人にみられると思うとその分責任感出ますしね!
あと個人的に今自作PCを作りたいとも考えているのでこの機会に詳しくなっとこうと思ったのも理由の一つです笑
もしかすると間違っている点などあるかもしれませんので、その時は指摘していただけると嬉しいです。
#◼️トランザクション管理と排他制御
データベースを同時に複数人でいじることができると不整合が起こることが予想できます
不整合を引き起こす要因からデータベースを守るのがトランザクション管理と排他制御です
##トランザクション管理
トランザクション・・・一連の処理(在庫更新の際、更新前の在庫数から更新後の在庫数へと変更するまでの処理のこと)をひとまとめにしたもの
##排他制御
トランザクションの間使用するデータをロックしておいて他の人が読み書きできないようにする機能です。
ロックする方法には共有ロックと専有ロックの二種類があります
共有ロック・・・他のユーザー:読む→可能、書き→不可
専有ロック・・・他のユーザー:読む→不可、書き→不可
※デッドロック・・・複数のトランザクションがお互いに相手の使いたいデータをロックしてしまいお互いがお互いのロック解除を永遠に持ち続ける現象のこと。こうなってしまった場合はいずれかのトランザクションを強制的にキャンセルする必要があります
##トランザクションに求められる ACID 特性
DBMSではトランザクション処理に対して4つの特性が必須とされ、それを各々の頭文字をとってACID特性といいます。
特性 | 説明 |
---|---|
Atomicity (原子性) |
「全て実行される」か「全く実行されない」かのいずれかで終了すること。 中途半端に一部だけ実行されるような事は許容しない |
Consistency (一貫性) |
データベースの内容が矛盾のない状態であること。 |
Isolation (隔離性) |
複数のトランザクションを同時に実行した場合と順番に実行した場合の処理結果が一致すること。 |
Durability (耐久性) |
正常に終了したトランザクションの更新結果は障害が発生してもデータベースから消失しないこと。何らかの復旧手段が保証されていないといけない |
##ストアドプロシージャ
データベースを操作する一連の処理手順(SQL文)もう一つのプログラムにまとめ、データベース管理システム DBMS側にあらかじめ保存しておくことをストアドプロシージャと呼びます
例)・・・クライアントサーバーシステムによってデータベースサーバーに保存されたストアドプロシージャはそのプロシージャ名を指定するだけでクライアントから実行させることができます
メリット①→ちまちまと SQL を流す必要がないので ネットワークの負荷が軽減できる
メリット②→プロシージャは SQL 文の解析も済ませた 即実行可能な形式なので処理速度の向上が見込める
#◼️データベースの障害管理
データベースには業務に必要なデータが大量にため込まれており、刻々と更新されています。
だからこれが壊れると一大事になっちゃいます。
ですがシステムである以上こういったことが必ず起こり得てしまうのでこういった障害が発生した時として
バックアップファイルやジャーナルファイルを使って回復を行うようになっています。
バックアップ・・・一日に一回といった頻度を決めて、その時点のデータベース内容を丸ごと別のファイルにコピーして保管すること
ジャーナル・・・バックアップを取るといっても常に更新できるわけではないのでバックアップとバックアップまでの間の内容に更新された気を苦を保護する目的として使われる。更新前と後で逐一記録して更新履歴を管理しています。
実際に障害が発生した場合はこれらのファイルを使ってロールバックやロールフォワードなど障害回復処理を行い元の状態に復旧します。
##コミットとロールバック
トランザクション単位で更新処理を管理するということはどういうことかというと
データベース に更新内容を反映させるのは「すべての処理が問題なく完了しました」と言うタイミングじゃないとだめということです。
コミット・・・トランザクション処理の一連が問題なく完了できたとき、最後にその方針を確定することでデータベースへの更新内容を反映させること
ロールバック・・・トランザクション処理中に何らかの障害が発生して更新に失敗した場合にデータベース更新前の状態を更新前ジャーナルから取得して データベースをトランザクション開始直前の状態にまで戻す処理のこと
##分散データベースと2相コミット
分散データベースシステム・・・物理的に分かれてる複数のデータベースを見かけ上一つのデータベースとして使えるようにしたシステム
イメージでいうと、主サイト(親)があり、それとは別にサイトA,B(子)が連携して動いているようなイメージ
親側で更新があった場合に子側でもその更新が適応されなければいけないことになる
2相コミット・・・この親が子に対して更新の可否を問い合わせてその結果に応じてコミット、ロールバックを行うこと
2相コミットの流れ
① 全てのサイトに対してコミットの可否を問い合わせる
↓
②各サイトからの返答が返ってくる
↓
③前菜とが コミット可能なら全サイトにコミットを指示一部でも不可 奈良 全サイトにロールバックを 指示する
##ロールフォワード
トランザクション処理中ではなく突然データベースが故障してしまった場合に行う処置方法です。
これまでに失ったデータをできるかぎり元に戻すために以下のような形で復旧を行います。
バックアップファイル+バックアップ以降の更新後ジャーナルから情報取得
#■最後に
ここまで長々と読んでくださりありがとうございました!
少し説明がわかりにくかった部分があるかと思いますが、もしわからないところがあればコメントしていただけると嬉しいです。
では!次の記事にて!