はい、可能です。
MirrorSyncには競合に対応するための以下の2つの強力な機能を搭載しています。
- 競合の検知
- フィールドレベルのマージ機能
この機能により、同一のレコードに対して両方のデータベースが変更されたことを検知し、設定に基づいて対応します。
この動作を制御するクライアントの構成には、2つの設定があります。
変更をまとめてマージする
この設定を採用した場合は以下のような処理を行います。
例)同じレコードに対して、Hubでは「名」フィールド、Spokeでは「姓」フィールドが変更された
- 同期を実行した際にデータベースの変更があり、HubとSpokeの双方で行われた変更が全て別のフィールドに対すりものだった場合、MirrorSyncはそれぞれの変更として検知して、両方のデータベースの内容を自動的にマージします。
- 例のケースの場合、Hubでは「姓」フィールドにSpokeの値が書き込まれます。Spokeでは「名」フィールドにHunの値が書き込まれます。
- 同期処理で変更が検知されて自動的に解決されたたことは、ユーザには知らせません。
- 同一のフィールドに対して双方で変更が加えられていた場合、フィールドには「競合」として扱われ、自動的にマージされることはありません。(例:Hubで「名」フィールドを"Andy" に変更し、Spokeで「名」フィールドに"Andrew" と変更された)
「競合」フラグを立てる
この設定を選択した場合、双方のレコードを自動的にマージする処理も行われず、同一のレコードに対する全ての変更を競合として扱います。
同一のフィールドに対して行われた変更なのか、異なるフィールドに対して行われた変更かは問いません。
競合の解決
競合が発生した場合、MirrorSyncは同期構成画面で選択されたオプションに基づいて競合を解決します。
ユーザが選択する
- MirrorSyncはユーザに対してWebベースのインターフェイスを表示し、発生した競合の概要と、両方のデータベースのどのフィールドが変更されたかを表示します。
- 変更された部分のテキストには色が付けられ、経験の浅いユーザにも簡単に最適な選択ができるようになっています。
- ユーザは、レコード全体を選択したり、レコードごとに個々のフィールドを選択したりすることができます。さらに両方のレコードの変更を組み合わせて手動で編集することもできます。
最後の変更を採用
- 最後に変更されたレコードを選択して競合を解決します。
- 例:ジョーがiPadで午後3:00にあるレコードを変更し、ケイトはその同じレコードをiPhoneで午後3:30に変更し、トムはサーバ上でそのレコードを午後4:00に変更した
- 例の解決方法:ジョーやケイトがデータベースを同期するときには、トムのレコードが使用されます。これは同期をいつ実行しても変わりません。
常にHubの値を採用
- 変更が行われたタイムスタンプなどを一切考慮せず、Hub上にある値を常に使用して競合を解決します。
- 基本的に、最初の同期が優先されるため、一般的には推奨されません。
- この設定の場合、最初にHubに同期した人のデータがHubに書き込まれた後に同一のレコードを変更して同期するオフラインユーザに対し、強制的に適用されます。
- この設定では、直接Hubデータベースに接続して値を変更するユーザの変更が、オフラインで同期するユーザが行う変更より常に優先順位が高い一部のケースで有用です。
管理者にメールで通知
- 同期構成時に指定した管理者のメールアドレスに競合を知らせるメールが送信されます。
- 管理者は、メールに記載されたURLをクリックすることで、「ユーザが選択する」で競合が発生した際に表示されるものと全く同じWebベースのユーザインターフェイスを使って競合を解決することができます。
- この方法を採用した場合、管理者が競合の解決を実施するまで、ユーザは同期することができないことに注意してください。
原文:Does MirrorSync do conflict resolution? http://docs.360works.com/index.php/MirrorSync_advanced_topics#Does_MirrorSync_do_conflict_resolution.3F
コメント
0件のコメント
サインインしてコメントを残してください。