Microsoft Sync Framework 系列(九):微软同步框架中的提供者(Provider)
同步提供者(synchronization provider)是 Microsoft Sync Framework 一个软件组件(software component),它连接了 MSF runtime 和要同步的信息存储(Sync Providers, which provide the link between the MSF runtime and the information stores being synchronized)。
在上一篇 Microsoft Sync Framework 系列(八):微软同步框架中的自定义数据同步基础 中我们说过,session 会连接两个 provider:source provider 和 destination provider 。
一些基本概念:
replica (复本)
在 Microsoft Sync Framework 中 replica 用来确保在 provider 枚举更改之前所有本地的更改都反映到了它的 knowledge 中。
change set (更改集)
源一组更改,包含的信息:global IDs,versions,knowledge(source replica 的),tombstones(墓碑)。
obsolete change (作废更改)
本地的更改已经包含在 destination knowledge 中,也就是说 destination 中该数据也更改,不能被应用到 destination 。(An obsolete change is a change that is already contained in the destination replica's knowledge and that should not be applied to the destination replica. )
Provider 的 Enumerating Changes 功能
两个复本(replica)之间的更改枚举
destination provider 向 source provider 请求更改的过程如下:
destination replica 确保那些与 source 同步相关的本地更改都已经反映在了它的 knowledge 中。
destination provider 发送这些 knowledge,source provider 接受。
source provider 枚举本地的更改和删除并一条一条的与 destination replica's knowledge 比较,如果 source 本地的更改没有包含在 destination replica's knowledge 中 source provider 就将该更改加入 change set。
source provider 将 change set 返回给 destination provider。
处理 Obsolete Changes
当 change set 构建时,obsolete changes 被自动排除在外。provider 可以通过 MSF 提供的 API 执行自己的逻辑来验证添加到 change set 中的更改是否已经作废(obsolete)。
例如,provider 可以调用 knowledge 的 contains API 判断 change 的 global ID 和 version 是否包含在 destination replica's knowledge 中,如果没有,provider 将更改添加到 change batch。
处理冲突(Handling Conflicts )
destination provider 负责检查和处理冲突。
Concurrency Conflicts(并发冲突)
在同步之前,source 和 destination 对同一 item 进行了 update-delete(一方更新,另一方删除) 或者 update-update(两边都进行了更新)。
在 MSF 中当 destination replica 某个更改的 version 没有包含在(not contained in) source replica's knowledge 中时就认为发生了 Concurrency Conflicts 。
注意,这里的包含(Contains)是 knowledge API 里的一个操作,不是简单的包括。例如对于同一 Item, source 中的 A6 包含 destination 中的 A5。
Constraint Conflicts(约束冲突)
违反约束或者规则而被认为的冲突,Constraint Conflicts 的检测要根据具体的数据存储而定。
destination provider 负责在冲突处理完成后将更改应用到 destination replica ,同时负责维护 knowledge (将 made-with knowledge 更新到 learned knowledge)。
MSF 对具有层次结构的同步没有提供内建支持,需要 provider 自己处理。
MSF 对更改子集(change unit 或 subitem change)提供了良好的支持。合理的使用 change unit 可以有效提升同步效率,并且可以使我们细粒度的跟踪更改,减少冲突影响。
本系列最后一篇空话,下一步会介绍 synchronization services for ado.net 。
参考:
posted on 2008-05-27 09:14 FLYabroad 阅读(2526) 评论(3) 编辑 收藏 举报