针对标准提供程序的元数据要求

对于要同步的每个副本和每个项,Sync Framework 需要特定的一组元数据。

每个副本所需的元数据

要求每个副本存储下表所示的一组元数据。

元数据元素 说明

副本 ID

同步社区中的副本的唯一标识符。尽管副本 ID 是可变 ID 且可以由社区的架构定义,我们仍建议使用 16 字节的 GUID。传递给 Sync Framework 方法的副本 ID 的格式必须与提供程序指定的格式匹配。

托管代码:由 SyncIdFormatGroup 类的 ReplicaIdFormat 属性指定该格式。用 SyncId 类表示该 ID。

非托管代码:由 ID_PARAMETERS 结构 结构的 replicaId 字段指定该格式。用 SYNC_ID 结构表示该 ID。

当前滴答计数

副本的当前滴答计数。请注意这是一个概念上的数字,可以从每项知识的最新本地版本推导出,或是可用于副本的其他单调递增的值。例如,只要副本可以防止值重置,就可以使用当前的时钟时间。

托管代码:用 UInt64 表示。

非托管代码:用 ULONGLONG 表示。

副本键映射

副本 ID 和 4 字节的键之间的映射。由于元数据中多次出现副本 ID(建议使用 16 字节的 GUID),因此使用一个表将副本 ID 向下映射到 4 字节的键,以此表示这些 ID 效率更高。然后在需要引用特定副本的其他地方使用这些键。

托管代码:使用 ReplicaKeyMap 来表示。

非托管代码:使用 IReplicaKeyMap 来表示。

当前知识

副本所了解的针对特定作用域的版本信息摘要。应通过元数据服务来操作副本知识而非直接操作它。

托管代码:使用 SyncKnowledge 来表示。

非托管代码:使用 ISyncKnowledge 来表示。

遗忘知识

允许副本检测伙伴副本不知道已删除的项的情况。清除这些项的逻辑删除后可能会发生这种情况。通过元数据服务来操作遗忘知识。

托管代码:使用 ForgottenKnowledge 来表示。

非托管代码:使用 IForgottenKnowledge 来表示。

冲突日志

在枚举变更后检测到冲突且未得到解决时,记录这些冲突的日志。仅当在同步过程中保存冲突时,才需要副本以保存冲突日志。冲突日志的表示由副本决定,并且不一定授予 Sync Framework 对此日志的访问权。然而,当使用变更应用方时,Sync Framework 可帮助维护冲突日志。有关更多信息,请参见记录和管理冲突

逻辑删除日志

存储有关从副本删除项的信息,以便在同步社区中正确地传播删除变更并确保不重新引入删除的项。要求副本保留逻辑删除日志。逻辑删除日志的表示由副本决定,并且不一定授予 Sync Framework 对此日志的访问权。有关详细信息,请参阅管理逻辑删除

每个项所需的元数据

要同步的每个项必须具有下表所示的一组元数据。

元数据元素 说明

全局 ID

在副本中存储的项的标识符。由于副本负责生成全局 ID,因此它可以分配全局 ID,这将提高枚举效率。例如,社区可以定义自己的全局 ID 格式为具有 8 字节前缀的 GUID。然后可以使用该前缀来控制全局 ID 的排序顺序。这将使提供程序更方便地使用范围来枚举变更,由于一个范围可以包含很多项,因此将项表示为有序组时知识结构变得更为简洁。有关全局 ID 格式的更多信息,请参见可变 ID

托管代码:由 SyncIdFormatGroup 类的 ItemIdFormat 属性指定该格式。用 SyncId 类表示该 ID。

非托管代码:由 ID_PARAMETERS 结构 结构的 itemId 字段指定该格式。用 SYNC_ID 结构表示该 ID。

当前版本

特定项的最后更新版本。当前版本包含对项进行最后更新的副本的键,还包含执行变更时该副本的滴答计数。

当项使用变更单位时,基于每个变更单位存储此版本。例如,联系人对于地址和电话号码字段可能具有不同的变更单位版本号。

托管代码:用 SyncVersion 表示。

非托管代码:用 SYNC_VERSION 表示。

创建版本

创建项时的版本。创建版本包含创建项的副本的键,还包含创建项时该副本的滴答计数。

托管代码:用 SyncVersion 表示。

非托管代码:用 SYNC_VERSION 表示。

存储要求

由于副本决定全局 ID 的格式,因此存储每个项的元数据所需的空间各不相同。使用我们建议的 GUID 外加 8 字节前缀的格式时,所需的总存储空间为 48 字节,如下表所示。

字节

全局 ID

24(GUID + 8 字节的前缀)

当前版本

12(4 字节的副本键 + 8 字节的滴答计数)

创建版本

12(4 字节的副本键 + 8 字节的滴答计数)

总共 48 字节

约束冲突的元数据

如果约束冲突是通过合并冲突中的项来解决的,则合并的项需要其他元数据。有关详细信息,请参阅检测和解决约束冲突

自定义筛选器的元数据

当使用自定义筛选器时,每个副本和每个项都需要其他元数据。有关更多信息,请参见筛选同步数据

请参阅

参考

IReplicaKeyMap 接口
SYNC_ID 结构
SYNC_GID 结构
SYNC_VERSION 结构
ReplicaKeyMap
SyncId
SyncGlobalId
SyncIdFormat
SyncIdFormatGroup
SyncVersion

概念

管理标准提供程序的元数据
了解同步知识
可变 ID
同步版本
管理逻辑删除