1

たとえば、データベースに保存されているデータに基づいて、時間の経過とともに変更できる外部条件に基づいて何らかのアクティビティを実行しているプロセスがあるとします。このようなプロセスが強制終了され、再度開始されると、データの一貫性が失われます。たとえば、サービス ステータスに関する情報が不十分になるか、データの部分的に同期されたブランチが冗長になります。

そのような状況をどのように処理しますか?プロセスの起動時に有線の不整合をチェックし、メイン ロジックが開始する前にデータを正規化する必要がありますか?それとも、アボート信号を検出してクリーニングを行うことができますか? プロセスによって取得されたリソースについては心配していませんが、プロセスが既に実行できた未完了の変更です (ただし、プロセスの新規起動時に大幅に検出される可能性があります)。

4

2 に答える 2

1

プロセスが何をしているのか、またはプロセスが維持している状態の種類については言及していません。たとえば、データファイルへの書き込み、データベースの行の挿入/更新/削除などです。

一貫性のない可能性のあるデータがデータベースに保存されている場合、これを処理する通常の方法は、すべてのデータ変更がアトミックな作業単位を表すトランザクションで処理されるようにすることです。

このように、トランザクションの処理の途中でプロセスが強制終了された場合、データベースはこれを検出し、その時点までに行われた変更を自動的に元に戻し、状態を以前の(一貫した)時点に戻します。

したがって、トランザクションを使用すると、データベースの状態が常に一貫していることが保証され、最小限の一貫性チェックが必要になります。

于 2013-01-08T09:11:57.110 に答える
1

このような問題は、一般的に次の方法で解決されます。

  1. プロセスをいくつかの小さなアクションに分割する
  2. 各アクションがべき等であることを確認してください。つまり最初の実行の結果を変更せずに複数回実行できます。
  3. アクションが正常に完了した後、プロセス全体のステータスを進めます。

そのように、最後に正常に実行されたアクションに続くアクションから開始して、そこから続行するプロセスをいつでも再開できます。

于 2013-01-08T09:04:18.490 に答える