要約すると、あなたの質問は切断された同期に関連していると思います。
だからここに私が起こるべきだと思うことがあります:
初期同期 データとそれに関連するすべての情報 (行バージョン、ファイル チェックサムなど) を取得します。この情報を保存し、次の正常な同期まで元のままにしておくことが重要です。変更は、このデータの COPY に対して行う必要があります。
変更の追跡 データベースの行を扱っている場合、基本的に挿入、更新、および削除操作を追跡する必要があります。xml などのテキスト ファイルを扱う場合は、少し複雑になります。複数のユーザーがこのファイルを同時に編集する可能性が高い場合は、diff ツールが必要になるため、(ファイル全体ではなく) より詳細なレベルで競合を検出できます。
競合のチェック ここでも、データベースの行だけを扱っている場合、競合は簡単に検出できます。行が更新されるたびにインクリメントする別の列を作成できます (mssql には、このビルトインが mysql についてわからないと思います)。したがって、持っているコピーの番号がサーバー上の番号と異なる場合は、競合が発生しています。ファイルまたは文字列の場合、チェックサムが機能します。変更日も使用できると思いますが、ミスを防ぐために非常に正確で正確な測定値があることを確認してください. たとえば、ファイルを取得して、取得したらすぐに保存するとします。時間差が 1 ミリ秒だとしましょう。次に、ファイルに変更を加えてから、保存しようとします。記録された最終変更時刻が 10 ミリ秒までしか正確でない場合、私が取得したファイルは、保存したファイルと同じ更新日を持つ可能性が高いため、プログラムは競合がないと判断し、変更を上書きします。したがって、私は通常、安全のためにこの方法を使用しません。一方、マイナーな変更後にチェックサム/ハッシュの衝突が発生する可能性はほとんどありません。
競合の解決 ここが難しい部分です。これが自動化されたプロセスである場合は、状況を評価して、変更を上書きするか、変更を失うか、サーバーからデータを再度取得して変更をやり直すかを決定する必要があります。幸いなことに、人間の相互作用があるようです。しかし、コーディングするのはまだ大変です。データベースの行を扱っている場合は、個々の列を確認し、それをサーバーのデータと比較して、ユーザーに提示できます。アイデアは、競合を圧倒しないように、非常に細かい方法で競合をユーザーに提示することです。ほとんどの競合は、多くの異なる場所で非常に小さな違いがあるため、一度に 1 つの小さな違いをユーザーに提示します。したがって、テキスト ファイルの場合は、ほぼ同じですが、100 倍以上複雑です。したがって、基本的には diff ツールを作成または使用する必要があります (テキスト比較はまったく別のテーマであり、広範すぎてここで言及することはできません)。データベース: テキストが挿入、削除、または編集された場所。次に、それを同じ方法でユーザーに提示します。したがって、基本的に小さな競合ごとに、ユーザーは変更を破棄するか、サーバーの変更を上書きするか、サーバーに送信する前に手動で編集するかを選択する必要があります。
したがって、正しいことを行った場合、競合がある場合は、ユーザーに競合のリストが表示されます。これらの競合は、ユーザーが迅速に決定できるように十分に細かくする必要があります。したがって、たとえば、競合はスペルの変更です。ユーザーに段落全体を提供し、変更があり、何をすべきかを決定する必要があることをユーザーに伝えるのとは対照的に、単語のスペルから選択する方がユーザーにとって簡単です。の場合、ユーザーはこの小さなスペルミスを探す必要があります。
その他の考慮事項: データの検証 - データが変更されている可能性があるため、競合を解決した後に検証を実行する必要があることに注意してください。だからグーグル!切断された同期 - 記事がいくつかあると思います。
ソース: https://softwareengineering.stackexchange.com/questions/94634/synchronization-web-service-methodologies-or-papers