2016-08-25 8 views
0

いくつかのデータを含むオブジェクトDがあるとしましょう。これは、データオブジェクトD とD を発生させる2つの異なる場所で異なって変更されています。内容に応じて、同期プロセスの一部として戻ってマージされると、D およびD が互いに競合する可能性があります。コンシューマ向けアプリケーションでデータを同期する際に競合をどのように処理しますか?

バージョンコントロールシステムなどのシステムでは、2つのデータオブジェクトが互いに競合していることを指摘し、ユーザーにそれを残して手動で競合を解決します。

ただし、コンテンツをオンラインで同期させるメモ作成アプリケーションなどの消費者向けアプリケーションを想像してみましょう。この場合、ユーザーは異なる内容の同じメモの2つのバージョンを入力するために発生した可能性がある競合を手動で解決したくはありません。新しいオブジェクトのために古いオブジェクトを破棄することは、ユーザが望む古いオブジェクトに貴重なコンテンツが存在する可能性があるため、いずれも不可能である。

消費者向けアプリケーションでこのような競合を解決するにはどうすればよいですか?

+1

この問題は、VCSが競合を手動で解決するためにユーザーに残す理由です。正当性の識別子がない場合(つまり、保持する必要があり、拒否する必要がある場合)は、コードから行うことはできません。 – vish4071

+0

非常に真実であり、VCSが自動的に変更をマージできる場合でも、結果が矛盾しないことを意味するものではありません。人間だけが[関連する回答](http://stackoverflow.com/a/38464406/23118)を決定することができます。 – hlovdal

答えて

1

手動の競合解消が必要ない場合は、両方の更新プログラムの変更を自動的にマージする必要があります。

すべてのアプリケーションでうまく機能する方法はありません。このような要件がある場合、自動マージが意味をなされるようにアプリケーションを慎重に設計する必要があります。

は、いくつかの一般的なアプローチがあり、そしてあなたは、さまざまな組み合わせで1またはそれらのすべてを行うことができます。

1)本当に速いの更新をマージします。 Googleのドキュメントを考えてみましょう - 人々が編集すると、更新はリアルタイムでマージされます。操作変換(https://en.wikipedia.org/wiki/Operational_transformation)は、そのようなマージを行う方法を正確に理解するのに良い方法ですが、そのドキュメントほど複雑である必要はありません。これがうまくいく理由は、アップデートが小さいことと、あなたが多くの作業を行う前に誰かがあなたのものを乱しているかどうかを知ることができるということです。丁寧さが競合を修正します - あなたのうちの1人は、もう1人がそのことで完了するまで待つでしょう。

2)ロック。ノートの編集ボタンをクリックすると、他の誰もあなたが完了するまでそれを編集できないようにロックします。これは古い学校であり、(1)ほど滑らかではありませんが、状況あなたができるほど早く合併することはできません(1)。

3)データモデルとインターフェイスを設計して、可能な限りマージされたバージョンを作成してください。誰でもメモを追加できますが、そのメモはその所有者だけが編集できます。たとえば、問題はありません。あるいは、あなたが最初に許可を求めて私があなたにそれを与えるならば、私のものだけを編集することができます。物事がそれよりも複雑になるにつれて、これはますます困難になります。アプリケーションの機能を犠牲にしたくない場合は、通常これをうまく実行することはできません。しかし、他の人の仕事を混乱させるのは失礼だから、よい行動を強制するためだけにやったようなことがたくさんあります。フィネスでそれをしました。

関連する問題