reset耐性


私はいままでに何度かWindows用の商用ゲームを作ってきているが、ゲームのセーブデータの取扱いには結構頭を悩ませるところである。


小さな規模のゲームなら、ゲーム中にhardware resetがかかってユーザーがセーブデータなり何なりを壊しても、「再インストールしてください」で済むかも知れないが、ある程度長時間のプレイを必要とするゲームで、セーブデータが吹っ飛んだらユーザーは発狂ものである。


一概に「セーブデータが吹っ飛ぶ」と言っても、その状態は様々である。


・書きだしたはずのファイルサイズが何故か0になっている
・データの上書き中にhardware resetがかかってデータの前のほうと後のほうとで整合性がとれていない
・複数のファイルを書き出したはずなのに、(書き出しの途中でhardware resetがかかったために)特定のファイルだけ書きだしに失敗している。そのためファイル全体としてのデータの整合性がとれなくなっている。(2つのファイルを書き出した場合、あとから書きだしたはずのデータだけが正しく書き出せていることもある。このへんはファイルシステムの実装による。)


などなど。


ここで言えることは、「セーブデータが吹っ飛ぶ」=「ゲームが最初からやりなおしになる」ことにユーザーは耐えられないのであって、hardware resetがかかったときに、今回(OS起動後)ゲームをプレイした分がroll backしても、ユーザーとしては、諦めがつく範疇である。(たぶん)


簡単なセーブデータの保存であってもファイルシステムを直接触る場合、「セーブデータが吹っ飛ぶ」ことを避けるのは難しく、(Vista以前のファイルシステムであっても)そのへんの設計と実装をするのは面倒なので(うちのような弱小ソフトハウスとしては)DBMSにお任せしたいところではある。


そう考えると、耐障害性のあるアプリを書くためには、OSがファイルシステムの代わりに使えるDBMSを提供しておいて欲しい。*1


という視点で、NyaRuRuさんの


[Vista]辞書が壊れない仮名漢字変換エンジンの作者を雇うのは案外に難しいのかもしれない,という話(id:NyaRuRu:20080318)


について考えると..


かな漢字変換エンジンにとって、辞書が壊れるというのは致命的な問題だと誰もが認識している
かな漢字変換を学習させた内容がhardware resetがかかったときなどに、OS起動後、そのときに至るまで漢字変換を学習したぶんがwrite backされていなかったとしても、それはさほど問題ではない。


よって、かな漢字変換の学習内容は、頻繁にHDDにwrite backする必要は無く、定期的に(30分おきぐらいで)hardware resetに対して安全な方法で(例えばほとんどのDBMSがそうであるように)write backしてもらえればそれでいい。


これなら技術的にはさほど難しくないだろうし、ユーザーが望んでいるのはそのレベルだと思う。


一方、Vistaファイルシステムを用いて(DBMSを使わず)、リアルタイムにかな漢字変換の学習内容を書き戻して、それでいてhardware reset耐性を持たせようとするなら、DBMS作ってるような連中でも呼んでこないと難しいんじゃないかと…。

*1:それがSQL Server 2005 Compact Editionですか?わかりません><。