同步數據庫簡介
概述
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
另外兩個數據庫同步提供程序只支持脫機方案。這些提供程序已經被上述同時支持脫機方案和協作方案的提供程序取代。所以對於新開發的應用程序,請使用上面介紹的提供程序。脫機方案提供程序包括:DbServerSyncProvider、SqlCeClientSyncProvider 。
這兩個提供程序具備如下特征:
- 適合於客戶端-服務器拓撲。
- 總是成對使用。例如,您不能通過使用 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。
本篇講述了數據庫同步的背景和優勢以及具體的數據庫同步提供程序,也講述了其體系結構和重要的同步類,下一篇我們將通過一個完整的實例來展示如何使用這些提供程序和相關類來完成我們的同步任務。