「さらに、アプリケーションを正常にシャットダウンしない電力損失が発生する可能性があるため、どのソリューションにも、電源の再投入に耐えられる永続的なキャッシュが必要です。」
Hibernate レベル 2 キャッシュを使用した解決策は既に頭に浮かんでいます。しかし、あなたは本当の要件が何であるかを言いませんでした。あなたは現実的でないネットワークを持っています。大丈夫です、あなたは現実的でない電源を持っています。それもOKです。では、どのレベルのサービスを達成したいですか? 許容できるものとできないものは何ですか?
データの損失は許容されますか? あなたはどのくらい受け入れることができますか?どのようなリスクを受け入れますか?
より明確にするために、データベースのローカル レプリカまたは少なくともその一部があるとします。ローカルで行われた変更をキュー/保存する方法を知っているとしましょう。電源障害の場合に備えて、これらの変更をハードドライブに保存するとします。接続が再び利用可能になったときに、変更をメイン データベースにマージできるとします。
それはすでに多くの仮定です。わかりましたが、停電後に 1 台のハードドライブに障害が発生した場合はどうなりますか? ハードドライブは電源障害を嫌い、電源障害で破損する傾向があり、さらには破損する可能性があることをご存知ですか?
そこで、RAID を構成し、無停電電源装置を追加します。それはすばらしい。OS から電源障害イベントを検出します。現在のトランザクションを終了し、正しくシャットダウンします。RAID は、ディスク障害からユーザーを保護します。
わかりましたが、コンピュータ全体が機能しなくなったらどうなりますか? 火災の場合はどうなりますか?それとも水害?すべてのディスクが管理され、データは回復不能になり、中央データベースと同期されていないものは失われます。それは受け入れられるかどうか?
Wi-Fi がオンになっている場合でも、電源は完全に機能します... 中央データベースの信頼性はどうですか? 定期的なバックアップはありますか? またはクラスタリング ソリューションですか。とにかく、中央データベースは信頼できますか?
データベースの観点からは、クラスタまたはバックアップを使用し、トランザクションを使用してデータの一貫性を確保するのは簡単です。データを失う可能性はありますが (特にクラスターを使用していない場合)、たとえば最後のバックアップまで回復できるはずです。
ただし、オフラインで (データベースを使用できない状態で) 作業したい場合、データベースを変更できるのは自分だけではない場合、競合が発生します。これは、キャッシュ、休止状態、その他の技術的な問題ではなくなりました。
これは機能上の問題です。いくつかの変更がオフラインで発生し、マージする必要がある場合はどうすればよいですか? 許容できるものは何ですか? そうではないもの。これは、再接続時に最新の変更が適用され、古い変更が破棄される可能性があります。または、潜在的な競合が検出され、ユーザーに対処するよう促します。キューに入れられた変更を適用して、それらすべてを適用することができます...
「オフラインモード」を提供できると考える傾向がありますが、ユーザーはオフラインであることを認識する必要があり、変更が中央データベースで永続的に行われ、最終的に競合が解決されるときに通知が必要です。しかし、それは私の視点です。