- 締切済み
データが壊れにくい保管・運用方法について
データを保存する場合に利用されるのが主にテキストファイルとデータベースです。 (データベースといってもファイルの集合体ですが) 質問は2点あって、ひとつはテキストファイルを利用する場合、ファイル自体の破損を防ぐにはどうすればいいかということ。カウンターを作っても、値が飛ばずに完全に機能するようなものを作るにはどうすればいいでしょうか? もうひとつはデータベースは破壊されることはないのか? ということです(どういうときに壊れるのか、壊われるなら、それを防ぐ方法が知りたいです)。 ハードディスクがクラッシュしたとか、サーバーの電源が落ちたというのはナシです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- zxcv0000
- ベストアンサー率56% (111/196)
> 多重化で対応するしかないと思います。 多重化って、ディスクのミラーリングですか? 複数の CPU に同じ処理をさすんですか? いずれの場合も、CGIのバグに対しては無力だと思いますが? バグを想定して任意の時点に戻るためには、更新ログ方式が良いと思います。
- zxcv0000
- ベストアンサー率56% (111/196)
故障やOS・Webサーバーソフト等の不良・誤動作以外で問題が起るのは、大抵は CGIのバグか排他の問題でしょう。 CGIのバグは、地道に潰すか、もしくは保証付きの有償ソフトを利用しましょう。(本当にあるかは知りません) 排他の問題というのは、複数の閲覧者が同時または前後して送信した時に、CGIが同じファイルを更新しようとした場合に発生し得ます。 Perlでファイルを更新するなら、flock() とかを使ってうまくやれば問題発生を回避できます。 データベースエンジンの場合は、エンジン次第でしょう。 いずれの場合も安全なコードを書くには実力勝負になります。 何かを教えてもらえばOKと言う性質ではありません。
お礼
>何かを教えてもらえばOKと言う性質ではありません。 多重化で対応するしかないと思います。flock()を使用すると同時に、対象ファイルを多重化しておく。さらに定期的なバックアップをとって、万が一、壊れた場合の復旧作業をやりやすくしておく。しかし、果たしてこれで完璧なのだろうか? 他に手段はないだろうか? という思いが残りますね…。
お礼
>多重化って、ディスクのミラーリングですか? 複数の CPU に同じ処理をさすんですか? 違います。ひとつの処理だけに頼らない、という意味で使用しています。たとえば、まずlockを使用します。そして1個のファイルへ書き込むのではなく、複数のファイルへ交互に書き込むようにすれば、1個で運用しているよりは安心して運用できるでしょう。そういう意味で使用しています。