之前的文章讲解了FeedSync XML 文件的格式,以及如何实现数据更新同步。 下面介绍当发生数据一致性冲突的时候, FeedSync 如何处理。
还是基于同样的假设, 我有一个Feed 文件描述今天我的任务列表(如下)。 我有2台电脑,台式机电脑A以及笔记本电脑B, 在两台电脑上都可以对任务列表进行修改。
<item>
<sx:sync id="ep1.100" updates="3" deleted="false" noconflicts="false">
<sx:history sequence="3" when="2007-11-29T06:27:13Z" by="B"/>
<sx:history sequence="2" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="1" when="2007-11-29T06:27:11Z" by="A"/>
</sx:sync>
<title>Buy Groceries</title>
<description>Get milk, eggs, butter and bread</description>
</item>
现在在台式机电脑A 上,我把 "Buy groceries” 那项的description改成“Get milk, eggs, butter and rolls” 。 这个时候A上的Feed文件变成
<sx:sync id="ep1.100" updates="3" deleted="false" noconflicts="false">
<sx:history sequence="3" when="2007-11-29T06:27:13Z" by="B"/>
<sx:history sequence="2" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="1" when="2007-11-29T06:27:11Z" by="A"/>
</sx:sync>
<title>Buy Groceries</title>
<description>Get milk, eggs, butter and bread</description>
</item>
现在在台式机电脑A 上,我把 "Buy groceries” 那项的description改成“Get milk, eggs, butter and rolls” 。 这个时候A上的Feed文件变成
<item>
<sx:sync id="ep1.100" updates="4" deleted="false" noconflicts="false">
<sx:history sequence="4" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="3" when="2007-11-29T06:27:13Z" by="B"/>
<sx:history sequence="2" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="1" when="2007-11-29T06:27:11Z" by="A"/>
</sx:sync>
<title>Buy Groceries</title>
<description>Get milk, eggs, butter and rolls</description>
</item>
在笔记本电脑B 上, 我把"Buy groceries” 的标题改成 "Buy groceries - DONE” 。这个时候B上的Feed文件变成
<sx:sync id="ep1.100" updates="4" deleted="false" noconflicts="false">
<sx:history sequence="4" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="3" when="2007-11-29T06:27:13Z" by="B"/>
<sx:history sequence="2" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="1" when="2007-11-29T06:27:11Z" by="A"/>
</sx:sync>
<title>Buy Groceries</title>
<description>Get milk, eggs, butter and rolls</description>
</item>
在笔记本电脑B 上, 我把"Buy groceries” 的标题改成 "Buy groceries - DONE” 。这个时候B上的Feed文件变成
<item>
<sx:sync id="ep1.100" updates="4" deleted="false" noconflicts="false">
<sx:history sequence="4" when="2007-11-29T06:27:15Z" by="B"/>
<sx:history sequence="3" when="2007-11-29T06:27:13Z" by="B"/>
<sx:history sequence="2" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="1" when="2007-11-29T06:27:11Z" by="A"/>
</sx:sync>
<title>Buy Groceries - DONE</title>
<description>Get milk, eggs, butter and bread</description>
</item>
然后,在Server 上做同步的时候, 因为电脑B 上做改动的时间晚于电脑A, 最后的结果将是电脑B 上版本“胜出”电脑A 上的版本。而电脑A 上的版本会被保留大到了<sx:history> 标签里面。 以下是同步后,server上的版本:
<sx:sync id="ep1.100" updates="4" deleted="false" noconflicts="false">
<sx:history sequence="4" when="2007-11-29T06:27:15Z" by="B"/>
<sx:history sequence="3" when="2007-11-29T06:27:13Z" by="B"/>
<sx:history sequence="2" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="1" when="2007-11-29T06:27:11Z" by="A"/>
</sx:sync>
<title>Buy Groceries - DONE</title>
<description>Get milk, eggs, butter and bread</description>
</item>
然后,在Server 上做同步的时候, 因为电脑B 上做改动的时间晚于电脑A, 最后的结果将是电脑B 上版本“胜出”电脑A 上的版本。而电脑A 上的版本会被保留大到了<sx:history> 标签里面。 以下是同步后,server上的版本:
<item>
<sx:sync id="ep1.100" updates="4" deleted="false" noconflicts="false">
<sx:history sequence="4" when="2007-11-29T06:27:15Z" by="B"/>
<sx:history sequence="3" when="2007-11-29T06:27:13Z" by="B"/>
<sx:history sequence="2" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="1" when="2007-11-29T06:27:11Z" by="A"/>
<sx:conflicts>
<item>
<sx:sync id="ep1.100" updates="4" deleted="false" noconflicts="false">
<sx:history sequence="4" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="3" when="2007-11-29T06:27:13Z" by="B"/>
<sx:history sequence="2" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="1" when="2007-11-29T06:27:11Z" by="A"/>
</sx:sync>
<title>Buy Groceries</title>
<description>Get milk, eggs, butter and rolls</description>
</item>
</sx:conflicts>
</sx:sync>
<title>Buy Groceries - DONE</title>
<description>Get milk, eggs, butter and bread</description>
</item>
这时候,我在电脑B上会从Server 那边收到这个冲突的通知, 我可以选择解决这个冲突。 最终server那边的feed文件变成
<sx:sync id="ep1.100" updates="4" deleted="false" noconflicts="false">
<sx:history sequence="4" when="2007-11-29T06:27:15Z" by="B"/>
<sx:history sequence="3" when="2007-11-29T06:27:13Z" by="B"/>
<sx:history sequence="2" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="1" when="2007-11-29T06:27:11Z" by="A"/>
<sx:conflicts>
<item>
<sx:sync id="ep1.100" updates="4" deleted="false" noconflicts="false">
<sx:history sequence="4" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="3" when="2007-11-29T06:27:13Z" by="B"/>
<sx:history sequence="2" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="1" when="2007-11-29T06:27:11Z" by="A"/>
</sx:sync>
<title>Buy Groceries</title>
<description>Get milk, eggs, butter and rolls</description>
</item>
</sx:conflicts>
</sx:sync>
<title>Buy Groceries - DONE</title>
<description>Get milk, eggs, butter and bread</description>
</item>
这时候,我在电脑B上会从Server 那边收到这个冲突的通知, 我可以选择解决这个冲突。 最终server那边的feed文件变成
<item>
<sx:sync id="ep1.100" updates="5" deleted="false" noconflicts="false">
<sx:history sequence="5" when="2007-11-29T06:27:16Z" by="B"/>
<sx:history sequence="4" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="4" when="2007-11-29T06:27:15Z" by="B"/>
<sx:history sequence="3" when="2007-11-29T06:27:13Z" by="B"/>
<sx:history sequence="2" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="1" when="2007-11-29T06:27:11Z" by="A"/>
</sx:sync>
<title>Buy Groceries - DONE</title>
<description>Get milk, eggs, butter and bread</description>
</item>
<sx:sync id="ep1.100" updates="5" deleted="false" noconflicts="false">
<sx:history sequence="5" when="2007-11-29T06:27:16Z" by="B"/>
<sx:history sequence="4" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="4" when="2007-11-29T06:27:15Z" by="B"/>
<sx:history sequence="3" when="2007-11-29T06:27:13Z" by="B"/>
<sx:history sequence="2" when="2007-11-29T06:27:13Z" by="A"/>
<sx:history sequence="1" when="2007-11-29T06:27:11Z" by="A"/>
</sx:sync>
<title>Buy Groceries - DONE</title>
<description>Get milk, eggs, butter and bread</description>
</item>
本文转自 陈本峰 51CTO博客,原文链接:http://blog.51cto.com/wingeek/273138
,如需转载请自行联系原作者