我们可以通过比较数据的当前状态和数据先前的状态来判断数据是否更改,通过比较数据的当前状态和要应用到本地存储中的数据状态来判断是否产生冲突。
在 Microsoft Sync Framework(MSF)中,这些用于跟踪数据更改,数据冲突的状态数据就叫做同步元数据(Metadata),元数据(Metadata)用于描述被同步复本(replicas)和条目(items)的信息。
与所有的同步框架和同步应用一样,同步元数据是 MSF 的基石。MSF 的目标是能够同步任何类型的数据,因此对要同步的数据类型没有特别规定,但是 MSF 需要为每个要同步的数据条目(item)或者数据复本(replica)维护通用的同步元数据(common metadata)。元数据不需要与被同步的数据保存在一起,MSF允许我们为元数据提供额外存储,例如可以保存到文件、数据库,或就在被同步的数据源中。
在 MSF 中 Metadata 有如下关键部分:
版本(Versions)
记录条目ID(item ID)及条目何时何地被更改的信息。条目(item)可以是任何可以标志的同步单元,例如数据库表里的一行,或者数据库表里一行中的一个或者几个字段。
当一条数据被更改时,该更改(change)的创建版本(create version)和更新版本(update version)信息都被记录。
更改跟踪最少应该处理到Item级(Per-item sync metadata),任何一个可能被修改的条目(Item)都必须有一个独立的版本。粒度越小数据冲突的可能性就越小(因为不会因为一个字段冲突而导致将整个表作为冲突处理),但是跟踪粒度越小,跟踪需要的信息存储量就越大。
知识(Knowledge)
知识(Knowledge)是 MSF 中用于枚举更改和冲突检测的压缩的数据表示,主要用于改善同步的性能。由于知识比较难于理解,会有专门的文章介绍。
墓碑(Tombstones)
顾名思义,墓碑(Tombstones)用于记录item的删除信息。
在 MSF 中墓碑需要包含下列信息:
全局ID(Global ID),在所有的复本中唯一,通过 Replica ID 和 tick count 标志;
删除版本(Deletion version),与Item被删除时关联的版本;
创建版本(Creation version),Item的创建版本,通过 Replica ID 和 tick count 标志;
用于记录墓碑信息的日志(Tombstones log)随着时间的增长可能会变得很大,因此 MSF 也提供 Tombstones log 清理的支持。
参考:
Introduction to the Microsoft Sync Framework Runtime
Microsoft Sync Framework, Part 2: Sync Metadata
Microsoft Sync Framework: Using the Metadata Storage Services