今回はバックアップについて解説するよ!二人はスマホのバックアップは取ってる?
ぼ、ぼくはデータのバックアップをパソコンに毎月取るようにしています。
ゲームのデータ消えて欲しくないので。
バックアップー、、iCloudのやつで聞いたことあるような…?
性格が出るよねぇ。
僕はちなみにバックアップは半年に一回あれば十分派。
ITの世界では大切なデータを守るために色々なバックアップ方法や考え方があるから、今回はバックアップについて解説するよ。
データの守り方
排他制御
システムを使うときは基本的に多くの人が同時にアクセスすることが容易に想像できると思う。
データベースにも同じことが言えて、同じデータに対して同時に更新を行なってしまう場合もありえるんだ。
そういった同時アクセスをいい感じに処理するために排他制御というものがある。
誰かがデータ操作をしているときはロックをかけて他の人は使えないようにする。
ロックには2種類あって、共有ロックと排他ロックだ。
共有ロックは更新は許可しないけど、読み取りは可能といったロック形式で、例えば共有フォルダに置いてあるファイルについて読み取り専用で開くことはできるけど編集はできないといったことができる。
排他ロックは更新も読み取りもできないロックをかける。
誰かがロックでデータを利用しているとき、自分を含め開いている人以外はデータにアクセスすることができないロックだ。
ロックってなんだか鍵みたいですね。
まさに鍵!トイレの鍵なんかが理解しやすい例かもね。
トイレの個室は内側から鍵をかけて他の人が入ってこれない状況を作る(=ロック)トイレを使うことはできないけどトイレを覗くことができるのが共有ロックで、トイレに全くアクセスできなくなるのが排他ロックって感じだ。
トイレを覗ける共有ロックは必要な場面ないですけどね…!!
ちなみに、ロックのタイミングによってはデータに対してユーザ同士がロックを掛け合う場合も存在してしまう。
トイレの例えを続けるなら、二人が同じトイレに入って同時に鍵を閉めてしまった場合だ。
どちらも鍵を開けようとするけど譲り合ってトイレから出れなくなるイメージ。
このことをデットロックと言うんだ。
設計の際はこのデットロックが発生しないように排他制御する必要があるよ。
バックアップ
データというのはアクシデントにより容易に消えてしまう。
大切なデータも消えてしまうなんてことは悲しすぎる!
だからこそバックアップという考え方が大事になってくるんだ。
データの消失前に別の場所にデータのコピーを置いておくというのがバックアップだ。
バックアップには主に3種類の取り方があるから、ここではその3種類について詳しく紹介するよ。
フルバックアップ
データの全てを毎回バックアップとしてコピーするのがフルバックアップだ。
一番簡単な分容量が大きくなってしまうデメリットはあるけど、確実な方法だよ。
1日ごとにバックアップを取る例ではこんな感じで毎日データのコピーを決まった時間に取る。
差分バックアップ
差分バックアップは、最初にフルバックアップをとったバックアップからどれだけ差があるのかを保存しておくバックアップ形式になる。
例えば、月曜日にフルバックアップをとった場合、火曜日のバックアップは火曜のデータと月曜日のフルバックアップデータの差をバックアップとして保存する。
水曜日は水曜日のデータと月曜日のフルバックアップデータの差をバックアップとするんだ。
毎日フルバックアップするよりも容量を抑えることができる。
ただ日にちが経つたびに差分は大きくなっていくから段々と容量が膨らんでいく仕組みになるよ。
増分バックアップ
増分バックアップは前日に対して増えた分だけバックアップを取る方法だよ。
月曜日にフルバックアップをとったとして、火曜日は火曜日に増えた分のデータをバックアップとして保存する。
水曜日は火曜日からさらに増えた分のデータをバックアップとして保存する要領だ。
増分バックアップは容量を抑えることが一番できる分、バックアップを復旧させる作業であるリストアを行うとき手間がかかるよ。
フルバックアップなら木曜日にデータが壊れたとしても水曜日のデータを読み込めばデータを復旧できるのに対して、増分バックアップは木曜日のデータが壊れた場合月曜日から戻って増分を1日ごとに読み込む必要があるから。
身近な例だとスマホのバックアップとかですけど、あれはフルバックアップですかね?
基本的にはそうだね。
中身の構造的に実は増分で、前回フルバックアップした内容から増えた分だけを追加しているって場合もあるかもしれないけど、基本はフルバックアップだと言えると思うよ。
リカバリ機能
バックアップを1日1回取っていたとしても、データは消えることがあってその間のデータをどうするか!っていう問題が眠っているんだ。
例えば、毎日0時にバックアップを取るデータがあった場合に、7時にデータが壊れた場合0時~7時までのデータは復旧できないのか!ってなる場合だ。
もちろんこれを防ぐこともできて、リカバリ機能って呼ぶんだ。
リカバリ機能はバックアップに加えてジャーナルと呼ばれる、データベースの操作のログを記録することで壊れたデータの復旧に活躍してくれる。
リカバリ機能について覚えておいて欲しいのは二つ、ロールフォワードとロールバック機能だ。
ロールフォワード
24時間前のバックアップデータしかない場合でもジャーナルさえあれば、同じ操作を繰り返すことで壊れる直前の状態に復元できる。
これをロールフォワード呼ぶんだ。
ジャーナルはデータベースに行った操作のログだから、「AとBを追加して、Cを追加して、Aを削除して、Dを追加した」というログをもとに復元できるんだ。
イメージとしては下の図を見てほしい。
例として、バックアップとして「E, D, A, B, C」というデータが入っているデータベースが色々あって壊れた状態から復元するも紹介するよ。
0時:「E, D, A, B, C」
1時:「Fを追加」(ジャーナル1)
2時:「AとBを削除」(ジャーナル2)
4時:「Gを追加」(ジャーナル3)
6時:「CをHに変更」(ジャーナル4)
7時:障害発生!データが壊れた!(直前の状態「E, D, H, F, G」)
ジャーナル1~4とフルバックアップの「E, D, A, B, C」を使えば、7時の直前の様子「E, D, H, F, G」に戻せることがわかると思う。
これがロールフォワードの仕組みだ。
な、なるほどですね。
ジャーナルってすごいですね。これならフルバックアップも少なくてすみそうな気がしちゃいます。
確かにそうだね。
ただ変更が激しいデータベースだとあまりにも多くのジャーナルが発生してしまう場合もあるからフルバックアップとのバランスが重要だね。
ロールバック
ロールバックは、データベースに対して間違った操作や処理中だった操作をキャンセルするとき役にたつんだ。
データベースへの処理を無かったことにできるよ。
ジャーナルは更新が完了した段階で記録されるんだけど、ロールバックが行われる場合は記録が残っているジャーナルまで戻るんだ。
だから、ジャーナルが綺麗に残る前に操作の間違いや操作中にキャンセルとなった場合は、綺麗に残っているジャーナルまで戻る。これをロールバックと呼ぶんだ。
図にまとめるとこんな感じ。
直前までのジャーナルが存在するからこそできる芸当だね。
まとめ
今回は、バックアップやデータ復旧について解説してきたわけだけど
どうだったかな?
データを守るためにこんな仕組みあったことに感動ですね。
な、なんとなく今すぐスマホのバックアップしたくなりました。
ははは、バックアップの重要性がわかったようで良かったよ。
ロールフォワードやロールバックは試験でも問われやすいから仕組みとともに問題の解き方にもどんどん慣れてほしい。
そのためにもいっぱい似たような問題を解くことをおすすめするよ。
じゃあ今回はここまで、また次回!!
はい!ありがとうございました!!