了解同步處理知識

本主題提供 Sync Framework 同步處理演算法如何使用「知識」(Knowledge) 以啟用「變更列舉」(Change Enumeration) 和「衝突偵測」(Conflict Detection) 的抽象觀點。知識是描述已直接或透過同步處理套用至複寫之所有變更的中繼資料。變更列舉是判斷來源複寫上已變更而目的地複寫並不知道之項目的處理。衝突偵測是判斷一個複寫已經進行的作業而並未傳輸變更知識到另一個複寫的處理,例如當兩個複寫對相同項目進行本機更新時。

注意

一般來說,同步處理提供者和應用程式不會直接使用知識,而是呼叫 Sync Framework 方法代表它們叫用知識運算。

知識運算

下表列出並說明同步處理知識運算。

運算子 描述

Contains

判斷指定的知識物件是否包含指定的項目「版本」(Version)(版本是複寫機碼及滴答計數)。換句話說,判斷擁有此知識的複寫是否已套用此變更。項目識別碼和版本是此運算的必要輸入。

此運算是用在變更列舉和衝突偵測中。

Union

從兩個知識物件,建構新知識物件,包含與至少一個原始知識物件所涵蓋完全相同的變更集。

這項運算是用於變更套用期間。

Project

使用指定的知識物件和項目識別碼、變更單位識別碼或項目識別碼,產生新的知識物件,此物件包含與指定識別碼或識別碼範圍相同的變更,而不包含其餘項目的知識。

這項運算是用於知識必須限定於特定項目、變更單位或項目範圍時,例如,在中斷的同步處理、批次處理,以及某種進階形式的篩選同步處理期間。

Exclude

使用指定的知識物件和項目識別碼或變更單位識別碼,產生新的知識物件,其中不包含指定識別碼的任何知識,但包含與其餘項目相同的原始變更。這項運算與 Project 運算正好相反:Exclude 運算將知識投射在所有項目上,只有指定的項目除外。

這項運算一般是用於變更套用失敗期間。

變更列舉

變更列舉是由來源提供者的開發人員實作。變更列舉使用指定的知識運算,以如下方式運作:

  1. 目的地提供者將目的地複寫的目前知識傳送給來源提供者。

  2. 來源提供者逐一查看來源複寫中的所有項目,然後為每個項目執行下列步驟:

    1. 判斷目的地知識是否包含儲存於來源複寫中的項目版本。

    2. 若未包含,就將變更批次中的項目變更包含在內,傳送目的地提供者。

注意

如果項目存放區支援,也可以使用在項目存放區上直接查詢,或使用查詢和此演算法的組合,處理變更列舉。

變更傳送

列舉的變更必須從來源提供者傳送給目的地提供者。若要執行這項作業,變更要分成批次,而為每個批次傳送下列資訊:

  • 描述變更本身的中繼資料。提供者在批次中為包含於批次中每個變更加入中繼資料。

  • 建立方式知識」(Made-with Knowledge) 一般是來源複寫的目前知識,要用於衝突偵測中。建立方式知識回答了下述問題:當您進行這些變更時,您知道什麼?提供者在批次中為新增至批次的每個變更群組加入建立方式知識。

  • 學習到的知識」(Learned Knowledge)。這是來源複寫的目前知識,投射在於此批次中傳送的項目子集上,同時也記錄衝突。學習到的知識回答了下述問題:我套用這些變更時會學習到什麼?Sync Framework 會代表提供者計算學習到的知識。

注意

批次處理和變更列舉可以同時並行處理,因為批次處理不必等候變更列舉完成。

排序

依變更傳送的順序而定,將知識投射到批次中的項目上,執行時耗費的時間可能較多,也可能較少。例如,知識支援項目識別碼範圍。因此,如果變更是依項目識別碼的套用順序傳送,知識投射會很有效率。

不管排序如何,投射作業一定都可以將知識投射於正在進行傳送的批次上。

錯誤

當來源提供者無法傳送列舉的項目時,項目就必須從進行傳送之學習到的知識中排除。這項作業是使用 Exclude 運算子來完成。

衝突偵測

衝突偵測是由 Sync Framework 元件處理,例如,NotifyingChangeApplier (適用於 Managed 程式碼) 或 ISynchronousNotifyingChangeApplier (適用於 Unmanaged 程式碼)。

目的地提供者接到變更批次 (其中包含批次之學習到的和建立方式知識) 之後,必須為批次中每個變更進行下列判斷:

  • 此變更是否與儲存於目的地複寫中的目前項目版本相衝突?

  • 此變更是否過時 (以儲存於目的地複寫中的目前項目版本取代)?

我們可以直截了當地回答這兩個問題:

  • 當儲存於目的地複寫中的項目版本不包含於來源複寫的知識中時,變更就是與目前版本相衝突。

  • 當變更的版本包含於目的地複寫的知識中時,變更就已過時。

    注意

    在一般情況下,過時的變更不會傳送,但是競爭情形會導致這些變更進行傳送。因此,Sync Framework 必須進行偵測及處理。

變更套用

接到變更且偵測到衝突之後,變更就可以套用到目的地複寫。此時,目的地提供者會執行下列步驟:

  1. 為在本機上發生的變更,調整變更批次中學習到的知識:

    1. 如果由於中斷或取消而只套用了變更子集,會為未套用的每個變更設定可復原的錯誤,Sync Framework 就會使用 Project 運算子,將學習到的知識只限定於此設定集。

    2. 如果由於數位版權管理 (DRM) 問題而致有些變更的應用失敗 (例如物件被鎖定),目的地提供者會為未套用的每一個變更設定可復原的錯誤,Sync Framework 是使用 Exclude 運算子,從學習到的知識移除失敗的變更。

    3. 如果任何衝突已偵測到而未解決,Sync Framework 也會使用 Exclude 運算子加以移除。

  2. 以 Sync Framework 所計算的已更新目的地知識取代目的地複寫的知識。

請參閱

概念

列舉變更
處理衝突
套用變更

其他資源

Microsoft Sync Framework