针对标准提供程序的元数据要求
对于要同步的每个副本和每个项,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