Microsoft Sync Framework同步数据库 1:同步数据库简介

同步数据库简介

概述

Sync Framework 支持在数据库之间进行同步。它提供了一个直观且灵活的 API,使您可以生成面向脱机和协作方案的应用程序。通过该 API,您可以根据应用程序的体系结构和要求,使用所提供的所有或部分组件来完成同步工作。Sync Framework 支持客户端-服务器、客户端到客户端和混合拓扑。在客户端-服务器拓扑中,所有客户端都与某一中央服务器同步。在客户端到客户端拓扑中,每个客户端都可以与其他客户端同步,而变更不必通过中央服务器来传递。混合拓扑由客户端到客户端拓扑和客户端-服务器拓扑组合而成。

传统的分布式系统

随着计算机网路技术的飞速发展,特别是因特网计术的应用与普及,分布式计算机软件已经越来越重要了。毕竟,分布式技术为我们带来了数据共享,使得交互与协作成为可能。对于一家企业来说,能够支持移动和远程工作人员正在变得越来越重要。组织机构应确保这些工作人员能够像在办公室时一样访问到相同的信息,这一点非常重要。在大多数情况下,这些用户将使用便携式计算机、办公台式机、smartphone 或 PDA,远程用户使用这些设备通过网络访问数据仓库。但是这种传统的分布式解决方案存在着如下这些严重缺陷而无法获得满意的效果:

  • 网络要求

若要使用户能够访问信息,远程设备在访问数据时必须能够不间断地连接到公司网络。对于某些工作人员(如在家办公的人员),这可能并不是什么问题。但对于其他用户(如经常出差的销售人员),就可能会比较困难。例如,如果某一销售人员正在拜访客户,并且由于没有网络连接而无法访问库存数据,该销售人员将无法有效地完成工作。

  • 数据访问速度

在典型的客户端-服务器公司环境中,用户拥有可快速访问信息的高速网络。但是,远程工作人员常常通过不太可靠的慢速网络进行连接。在使用典型的解决方案时,每次当用户需要一份数据时,都必须进行下载,因为无法将数据长久地保存到设备上。例如,销售人员每次打开应用程序时,都必须下载其产品列表,而使用信息填充应用程序所需的时间可能非常长,这让用户非常苦恼。

  • 单个故障点

使用这种解决方案时,用户常常依赖于单个服务器数据库。如果数据库由于计划的服务器停机或意外的服务器故障而无法使用,所有远程工作人员与其数据的连接将会中断。

  • 服务器可伸缩性

随着远程工作人员的数量不断增加,公司服务器的性能将会受到影响,并且可能需要添加更多的硬件。

偶尔连接的应用程序

现在对于传统分布式系统解决方案的一种替代方案是实现偶尔连接的应用程序。偶尔连接的应用程序仍使得远程工作人员能够访问数据,但其所需的信息在本地存储。偶尔连接的应用程序通常使用数据同步来填充本地数据库。

数据同步包括以下功能:定期获取存储在一个数据库(如客户端数据库)中的信息并与其他数据库(如服务器数据库)同步变更。基于同步的解决方案的优点在于:用户不再必须使用不间断的网络连接来访问信息。由于将数据存储在本地,用户可以随时访问数据,同时还减轻了中心数据库的处理负载。此外,由于网络速度不再是限制因素,用户现在能够以本地计算机的速度来访问数据。

客户端到客户端同步可避免发生单点故障,因为它使同步不依赖于所有变更均需通过服务器。这种将大量应用程序处理推向每个客户端的功能还有助于解决服务器可伸缩性问题。

是的,正如我们看到的,偶尔连接的应用程序非常适合解决因网络问题不能一直保持连接的程序,并且能改善系统性能,增强可靠性。而我们需要做的就是,需要在本地数据库和远程数据库中进行数据同步。Sync Framework就对数据库同步这种场景提供了优秀和完整的支持,使我们免于自己为每个系统去实现复杂的同步逻辑和异常处理。

Sync Framework 支持在数据库之间进行同步。它提供了一个直观且灵活的 API,使您可以生成面向脱机和协作方案的应用程序。通过该 API,您可以根据应用程序的体系结构和要求,使用所提供的所有或部分组件。Sync Framework 支持客户端-服务器、客户端到客户端和混合拓扑。

Sync Framework 使用“同步提供程序(Synchronization Providers)”与同步的每个数据库进行通信。Sync Framework 数据库提供程序(与 ADO.NET 数据提供程序类似)保护其他 Sync Framework 组件不受各数据库的特定实现方式的影响。Sync Framework 包括五个数据库提供程序,这些提供程序支持两种方案:脱机和协作方案。下图显示一个脱机方案:在客户端-服务器拓扑中,多个客户端连接到一个中央服务器,以便在连接可用时同步数据。

这种偶尔连接的应用程序的一个常见扩展是支持协作应用方案的能力。在协作方案中,两个数据库可以通过对等方式进行同步,而无需通过中央集线器。下图显示一个混合拓扑,其中,一个中央服务器与多个客户端同步,并且这些客户端能够彼此同步。此类拓扑可以支持允许用户共享项目备注的应用程序。项目团队成员常常要求他们可处理的数据的本地副本。当他们进行变更时,他们可以与服务器同步以上载变更,或与其他团队成员同步以交换变更。

 

数据库同步提供程序

Sync Framework包含的3个主要的数据库同步提供程序同时适用于脱机方案和协作方案,支持客户端-服务器,客户端-客户端和混合拓扑。我们可以各种方式组合使用这些提供程序来对我们选择的拓扑方案进行同步。因为Sync Framework元数据的使用,他们甚至可以和其他的Sync Framework提供程序进行同步。这3个同步提供程序如下:

SqlSyncProvider

  • 对SQL Server、SQL Server Express、和SQL Azure databases进行同步。
  • 提供丰富和可配置的准备工具来为数据库建立必要的同步结构,比如元数据表和存储过程。
  • 包含了灵活的过滤选项用以对需要同步的表按行或列进行过滤,基于参数的过滤机制支持最大限度的重用数据库元素。
  • 提供了相应组件来帮助我们管理同步元数据,包括清除元数据和恢复元素据(当我们从一个备份中恢复数据库时)。

SqlCeSyncProvider

  • 对SQL Server Compact databases进行同步
  • 提供简化的准备工具来为数据库建立必要的同步结构,比如元数据表和存储过程。
  • 可以基于之前准备的SQL Server Compact database 快照高效的创建新的SQL Server Compact databases。
  • 提供了相应组件来帮助我们管理同步元数据。

DbSyncProvider

  • 通常用于同步ADO.NET兼容的非 SQL Server 数据库。
  • 提供了功能完备的API以允许任何ADO.NET兼容的数据库来进行同步工作。

Offline-Only Providers

另外两个数据库同步提供程序只支持脱机方案。这些提供程序已经被上述同时支持脱机方案和协作方案的提供程序取代。所以对于新开发的应用程序,请使用上面介绍的提供程序。脱机方案提供程序包括:DbServerSyncProviderSqlCeClientSyncProvider

这两个提供程序具备如下特征:

  • 适合于客户端-服务器拓扑。
  • 总是成对使用。例如,您不能通过使用 ServerSyncProvider 的两个实例同步两个服务器数据库(改为使用 SqlSyncProvider 或 DbSyncProvider)。
  • 可能没有协作提供程序复杂,但无法与其他 Sync Framework 提供程序一起参与拓扑。

 

数据库同步的体系结构和类

数据库同步体系结构

在脱机和协作方案中,Sync Framework可以用在两层和N层架构中。在任何一种架构中,下面的活动发生在一个同步会话中:一个synchronization orchestrator与两个同步提供程序进行通讯来对数据库进行获取和应用变更。同步提供程序使用包含了相关SQL Commands的同步适配器(synchronization adapter)来为每个表进行同步。一些提供程序公开这些适配器以允许我们对这些SQL命令进行定制,另外一些提供程序则自动生成适配器来降低同步工作的复杂度。

下图显示了一个两层架构:一个同步会话中的所有组件都位于本地计算机,包含一个直接连接远程数据库的连接。在同步会话中,本地计算机是指发起同步的计算机。如果我们希望对多个计算机进行同步,每个计算机都必须包含图中所示的所有组件。

下图显示了一个N层架构:这种架构需要额外的组件,包括远程计算机中的组件和service,本地计算机上的proxy(代理)将会处理到远程数据库的连接。开发人员必须自己实现proxy和service。

参与同步的数据库可以是SQL Server 2005 SP2或之后的任意版本,包括SQL Server Compact 3.5 SP2及以后版本、SQL Azure、或提供了ADO.NET提供程序的其他数据库。Sync Framework为SQL Server和SQL Server Compact databases自动配置了变更跟踪和元数据存储。

Sync Framework类

SyncOrchestrator(同步代理)

同步代理通过以下方式驱动同步过程:

  • 基于Direction属性来决定应用改变的顺序和方向。
  • 调用服务器同步提供程序以对服务器数据库进行检索和应用变更。
  • 调用客户端同步提供程序以对客户端数据库进行检索和应用变更。

此外,同步代理还维护同步操作的会话级别信息,并向客户端上的应用程序提供成功消息、错误和统计信息。

SyncProvider (SqlSyncProvider, SqlCeSyncProvider, 和DbSyncProvider)

同步提供程序与相应的数据库进行通信,并将同步代理和数据库的特定实现屏蔽开来。对于SQL Server Compact databases ,使用SqlCeSyncProvider;而对于其他版本的SQL Server,包括SQL Azure,使用SqlSyncProvider;对于非SQL数据库使用DbSyncProvider。这3种Providers都继承自RelationalSyncProvider。同步提供程序的主要活动如下所示:

  • 检索自上次同步以来在(本地)数据库中发生的变更。
  • 对(远程)数据库应用增量变更。
  • 检测发生冲突的变更。
SyncAdapter (DbSyncAdapter和SqlCeSyncAdapter)

同步适配器模仿 ADO.NET 中的数据适配器,并为进行同步的每个表定义同步适配器。同步适配器为同步提供程序提供了与数据库交互所需的特定SQL命令。

对于SqlSyncProvider和SqlCeSyncProvider使用的同步适配器,Sync Framework会自动生成相关SQL命令,这样可以降低同步的复杂度。对于DbSyncAdapter,我们需要自己来创建适配器和指定相关SQL命令,例如 InsertCommand,此命令可从客户端数据库向服务器数据库应用插入。由于同步适配器使用 ADO.NET DbCommand 对象,因此可以使用 ADO.NET 支持的任意命令结构。这包括内联 Transact-SQL、存储过程、视图、函数等。这些命令只需要定义了要传输和应用的结构和数据的单个结果。

API中的其他类

上图展示了 API 中主要的类。但是,还有许多类没有在图中展示出来。若要获取有关所有可用类的信息,可以参见 Microsoft.Synchronization、Microsoft.Synchronization.Data、Microsoft.Synchronization.Data.SqlServerCe 和 Microsoft.Synchronization.Data.Server这是个dll中详细的API定义。以下部分介绍了您应该熟悉的其他重要的类。

DbSyncScope(同步作用域)

同步作用域是对进行同步的对象的一种逻辑分组。对于数据库同步,一个同步组通常是一组数据表,并且数据表可以被过滤。同时一个数据表可以被包含在一个或多个同步组中。

Database Provisioning Objects(数据库准备对象)

对于SQL Server和SQL Server Compact databases,Sync Framework提供了一组类用来描述同步组和每个同步组中包含哪些数据表。在这些表和同步组被定义后,我们就可以使用Sync Framework对象来对每个节点应用准备脚本(provisioning scripts)。这些脚本创建了一个变更跟踪和变更应用的基础架构,包含了metadata tables, triggers, 和stored procedures。下表列出了用来准备数据库和提供程序的相关类:

SQL Server、SQL Azure

SQL Server Compact

Description

DbSyncScopeDescription

DbSyncScopeDescription

表示同步作用域,同步作用域是作为一个单元同步的表(可筛选)的逻辑分组。

SqlSyncScopeProvisioning

SqlCeSyncScopeProvisioning

表示用于特定作用域的 SQL Server、SQL   Azure 或   SQL Server Compact 数据库的设置

SqlSyncProviderScopeConfiguration

SqlCeSyncProviderScopeConfiguration

表示针对特定作用域的 SqlSyncProvider 或   SqlCeSyncProvider 使用的配置信息。

DbSyncTableDescription

DbSyncTableDescription

表示在同步作用域中包括的表的架构。

DbSyncColumnDescription

DbSyncColumnDescription

表示属于在同步作用域中包括的表的列的架构。

SqlSyncDescriptionBuilder

SqlCeSyncDescriptionBuilder

表示同步中涉及的 SQL Server、SQL   Azure 或   SQL Server Compact 数据库的作用域和表信息。

SqlSyncTableProvisioning

SqlSyncTableProvisioning

表示由DbSyncTableDescription 对象表示的SQL   Server, SQL Azure, 或SQL Server Compact database设置。

SqlSyncProviderAdapterConfiguration

SqlSyncProviderAdapterConfiguration

表示某个数据库表的同步适配器配置信息

 

SyncOperationStatistics

会话统计信息是同步代理为每个同步会话提供的一组统计信息。统计信息包括与同步时间、所处理的变更数量以及所发生的任何冲突或异常有关的信息。

DbSyncSession

DbSyncSession对象提供了对同步会话变量的访问。会话变量是一些为开发人员提供的变量,用作在服务器上执行的选择、插入、更新和删除命令的参数。

Sync Framework DLLs

Sync Framework中的数据库同步类包含在如下这些DLLs中:

Microsoft.Synchronization.dll,包含了SyncOrchestrator。

Microsoft.Synchronization.SqlServer.dll,包含了SqlSyncProvider。

Microsoft.Synchronization.SqlServerCe.dll,包含了SqlCeSyncProvider。

Microsoft.Synchronization.Data.dll,包含了RelationalSyncProvider, DbSyncProvider 和DbSyncAdapter。

 

本篇讲述了数据库同步的背景和优势以及具体的数据库同步提供程序,也讲述了其体系结构和重要的同步类,下一篇我们将通过一个完整的实例来展示如何使用这些提供程序和相关类来完成我们的同步任务。

posted @ 2012-03-09 10:33  Life a Poem  阅读(5719)  评论(0编辑  收藏  举报