物理マシンホストで実行されている仮想マシン(Debian)があります。仮想マシンは、ローカルネットワークを介して頻繁に受信するデータのバッファーとして機能します(このデータの期間は0.5秒であるため、かなり高いスループットです)。受信したデータはすべて仮想マシンに保存され、UDPを介して外部サーバーに繰り返し転送されます。外部サーバーが(UDPを介して)データパケットを受信したことを確認すると、元のデータは仮想マシンから削除され、外部サーバーに再度送信されません。VMと外部サーバーを接続するインターネット接続は信頼性が低いため、一度に数日間ダウンする可能性があります。
VMをホストする物理マシンは、ランダムに1日に数回、電源が切断されます。これがいつ発生するかを知る方法はなく、UPS、バッテリー、または同様のソリューションをシステムに追加することはできません。
元々、データは仮想マシン上のファイルベースのHSQLDBデータベースに保存されていました。しかし、頻繁に電源が切れると、最終的にデータベーススクリプトファイルが破損します(ファイルシステムレベルではなく、つまり読み取り可能ですが、HSQLDBはそれを理解できません)。これが私の質問につながります。
停電が頻繁に発生する可能性がある環境で、データをどのように保存する必要がありますか?
考えられるオプションの1つは、フラットファイルを使用して、データの各パケットをファイルシステム上のファイルとして保存することです。この方法では、電力が失われたためにファイルが破損した場合、それは無視でき、残りのデータはそのまま残ります。ただし、これにはいくつかの問題があり、主に仮想マシンに保存される可能性のあるデータの量に関連しています。各データ間の0.5秒で、10日で1,728,000個のファイルが生成されます。これは、少なくとも、iノード数を増やしたファイルシステムを使用してこのデータを保存することを意味します(現在のファイルシステムのセットアップでは、メッセージが250,000で、使用ディスク容量が30%のiノードが不足しています)。また、管理するのは難しい(不可能ではない)。
他のオプションはありますか?Debianで動作するデータベースエンジンのうち、停電によって破損しないものはありますか?また、これにはどのファイルシステムを使用する必要がありますか?ext3は現在使用されているものです。
仮想マシンで実行されるソフトウェアはJava 6を使用して記述されているため、ソリューションに互換性がないことを願っています。