RetailPOS .net (Windows) アプリケーションを開発しています。
あるお客様から、「突然電源が落ちた場合、アプリケーションで処理中のデータはどうなりますか?」「アプリケーションは保存されていないデータを復元できますか?」という質問がありました。
この機能を .net アプリケーションにどのように組み込むことができるのでしょうか?
これには何が必要ですか?
まずはUPS(無停電電源装置)を調べてみよう
第二に、永続的なトランザクション、つまり早期かつ頻繁に保存するトランザクションを作成することを検討しますが、指示するまでコミットしません。これは、TSQL の典型的なトランザクションを少し超えています。
受信中の現在の情報をファイル システムに追加できます。パフォーマンス ヒットになりますが、最後にキャプチャされたアイテムに戻ることができます。
アプリケーションの起動時に、保留中のファイルがあるかどうかを検出し、回復するオプションを提供します。ファイルに保存されているデータを適宜読み込みます。
すべての情報を入手したら、支払い時に発生するプロセスを実行するときに、プロセスの重要な変更をアトミックに記録してください。外部システムにヒットしている場合は、操作を開始したときとすぐに戻ってきたときを記録します。上記では、失敗する可能性のある時間枠が常にありますが、できるだけ短くして、回復プロセスに十分な情報を提供する必要があります。最悪の場合、システムが自動的に回復できない場合は、プロセスのどこで停止したかを判断するのに十分な情報が必要です。
ハード パワー カット (ラップトップのバッテリがプラグを抜いているときに取り外された場合など) の場合は、ディスクに毎回書き込む以外にできることはあまりありません。ステップ。の。。仕方。(パフォーマンス ヒットについて話します。) また、何かを記録して、アプリケーションが以前に実行していた処理を再開したときにそれを知らせて、操作を続行するか再試行できるようにしてください。
電源ボタンを押してコンピュータをシャットダウン/スリープ/休止状態にするなどの電源切断の場合は、SystemEvents.PowerModeChanged イベントをリッスンし、それに応じて対処します。
最後に、データベースに途中で書き込むとデータが破損する場合は、データベースの書き込みがアトミックであることを確認してください (すべての変更が発生して受け入れられるか、またはまったく受け入れられないかのいずれか)。
アプリケーションでSQLiteを使用することを検討することをお勧めします。
page をいつ使用するかについて、いくつかの優れた情報があります。
際立っている点は次のとおりです。
アプリケーションのコンテンツが改訂されると、更新はアトミックに行われます
電源障害やクラッシュが発生した場合でも作業が失われないように、コンテンツは継続的かつアトミックに更新されます。
私が実装しようとしているアプリケーションの同様のオプションを探しています。これは、1 日中頻繁に電源が切れる第三世界の国で使用されます....これまでのところ、SQLite が適切な選択肢として際立っているようです。 .
しかし、結局のところ、あなたの選択は個々の状況と要件によって異なります。
本当に必要なのは、ディスク トランザクション上のアトミックです。これらを実行する方法は多数ありますが、既存のデータベース製品を使用している場合は、多くの場合、自動的に実行されます。
独自のデータベースまたはファイル形式を作成した場合、ファイル形式に応じていくつかの作業が削減されます。
PowerFailureException クラスはこれを解決します。実際にはUPSで電力を維持するだけです。他の唯一のオプションは、データベース トランザクションの原子性を維持することです。