Microsoft Sync Framework 系列(五):微软同步框架中的元数据(Metadata)
我们可以通过比较数据的当前状态和数据先前的状态来判断数据是否更改,通过比较数据的当前状态和要应用到本地存储中的数据状态来判断是否产生冲突。
在 Microsoft Sync Framework(MSF)中,这些用于跟踪数据更改,数据冲突的状态数据就叫做同步元数据(Metadata),元数据(Metadata)用于描述被同步复本(replicas)和条目(items)的信息。
与所有的同步框架和同步应用一样,同步元数据是 MSF 的基石。MSF 的目标是能够同步任何类型的数据,因此对要同步的数据类型没有特别规定,但是 MSF 需要为每个要同步的数据条目(item)或者数据复本(replica)维护通用的同步元数据(common metadata)。元数据不需要与被同步的数据保存在一起,MSF允许我们为元数据提供额外存储,例如可以保存到文件、数据库,或就在被同步的数据源中。
在 MSF 中 Metadata 有如下关键部分:
- 版本(Versions)
- 知识(Knowledge)
- 墓碑(Tombstones)
版本(Versions)
记录条目ID(item ID)及条目何时何地被更改的信息。条目(item)可以是任何可以标志的同步单元,例如数据库表里的一行,或者数据库表里一行中的一个或者几个字段。
当一条数据被更改时,该更改(change)的创建版本(create version)和更新版本(update version)信息都被记录。
- 版本与要更踪的条目关联,每个版本有两部分组成:滴答计数器(tick count),复本ID(replica ID)。
- 版本中的滴答计数器(Tick Count)是一个逻辑时钟,用于记录Item被创建或修改的逻辑时间,必须保证tick count在一个复本中可以唯一的标志一个更改(a tick count which is a logical clock used source-wide to uniquely identify a change),也就是在一个同步复本(例如source和destination)中tick count不能重复(并且正态增加),这样才能准确判断Item是否有修改(只要有修改,当前同步复本【当前同步一方】的最新tick count就会设置到Item版本的tick count上,当前的tick肯定比原先所有item版本的tick大)。
条目可以在多个复本中被修改(Items can be changed on different replicas),版本中的复本ID(Replica ID),用于唯一标志一个用于同步的复本(replica),这样我们知道这次更改是在哪个复本上做的(谁做的,source还是destination?A还是B修改了数据?)。
The version is essentially a tuple consisting of a sync endpoint Id which made a change and logical clock of the time when the change was made.The logical clock is the replica's own clock which is monotonically increasing and thus we a have a guarantee that each subsequent change made to the data on that replica will have a logical clock value associated with the version greater than a previous change to the data made on that replica.
更改跟踪最少应该处理到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
posted on 2008-05-22 18:22 FLYabroad 阅读(3072) 评论(5) 编辑 收藏 举报