データ同期の基礎
Microsoft Sync Framework は、同期セッションと 2 つの同期プロバイダという、3 つの基本的なコンポーネントを使用して、データ ストア (レプリカ) を同期します。データを同期する際には、アプリケーションから同期セッションを作成し、それを同期元プロバイダと同期先プロバイダに渡します。同期セッションでは、同期元のレプリカで発生した新しい変更が、同期元プロバイダを使用して取得されます。また、取得された変更は、同期先プロバイダを使用して同期先のレプリカに適用されます。
開発の中心となる作業はプロバイダの作成です。プロバイダは、レプリカのメタデータやナレッジのほか、同期対象となる各項目のメタデータを管理します。対応するデータ ストアとの間で実際の項目データを転送するのもプロバイダの処理です。プロバイダは、Sync Framework のコンポーネントを使用し、同期元として機能する場合には変更を列挙し、同期先として機能する場合には競合を検出して、変更を適用します。
同期のアルゴリズム
一方向同期のアルゴリズムには、次の手順が含まれます。
セッションが、同期先レプリカの現在のナレッジを取得し、同期元プロバイダに送信します。
同期元プロバイダが、同期先のナレッジに存在しない変更を列挙します。
同期元プロバイダが変更をセッションに送信します。
セッションが競合を検出し、同期先プロバイダを通じて、変更を同期先レプリカに適用します。
2 つのレプリカ間の双方向同期は、2 回の一方向同期によって実現されます。
マネージ コード : Direction プロパティが DownloadAndUpload または UploadAndDownload に設定されている場合、SyncOrchestrator オブジェクトは一方向同期を 2 回実行します。
アンマネージ コード : アプリケーションは、それぞれの一方向同期について、ISyncSession オブジェクトを作成する必要があります。
メタデータの管理
それぞれのレプリカは、レプリカそのものとそのナレッジを表す、一連のメタデータを同期コミュニティに提供する必要があります (同期コミュニティとは、同期状態を互いに維持する一連のレプリカのことです)。レプリカごとに必要なメタデータとしては、レプリカ ID、現在のティック数、レプリカ キー マップ、現在のナレッジ、忘れられたナレッジ、競合ログ、廃棄標識ログなどがあります。レプリカは、同期対象となる各項目のメタデータも管理する必要があります。項目ごとに必要なメタデータとしては、グローバル ID、現在のバージョン、作成バージョンなどがあります。通常、同期に必要なメタデータは、同期プロバイダによって管理されます。ただし、レプリカの実装によっては、メタデータの管理を一部、独立したコンポーネントで処理した方がよい場合もあります (廃棄標識を同期中ではなく予定された時刻にクリーンアップするサービスなど)。
メタデータの詳細については、「メタデータの要件」を参照してください。
同期プロバイダ
プロバイダはレプリカのメタデータを管理する以外に、Sync Framework と連携しながら、変更を列挙したり、競合を検出したりします。また、レプリカの項目ストアとも連携します。たとえば、同期元プロバイダは、項目ストアと連携しながら項目データを送信します。一方、同期先プロバイダは、項目ストアと連携して変更を適用します。
マネージ コード : プロバイダは、KnowledgeSyncProvider、IChangeDataRetriever、および INotifyingChangeApplierTarget の抽象メソッドおよび抽象プロパティを実装します。
アンマネージ コード : プロバイダは、IKnowledgeSyncProvider、ISyncProvider、ISynchronousDataRetriever、および ISynchronousNotifyingChangeApplierTarget の各インターフェイス (非同期プロバイダの場合は、それぞれ非同期バージョンのインターフェイス) を実装します。
同期プロバイダの詳細、およびこれらのインターフェイスの実装方法と使用方法については、「同期プロバイダ」を参照してください。
同期アプリケーション
同期アプリケーションは、同期セッション オブジェクトを作成して、それをプロバイダに接続し、同期ランタイムをホストするコンポーネントです。
マネージ コードを使用した同期アプリケーションの実装
同期を開始するには、SyncOrchestrator オブジェクトを作成します。次に、LocalProvider プロパティと RemoteProvider プロパティに対し、同期対象となる 2 つのプロバイダの SyncProvider インターフェイスを設定します。アプリケーションから、適切なメソッドを使用して、プロバイダのインターフェイスを取得するか作成します。SyncOrchestrator オブジェクトを作成したら、Synchronize を呼び出して同期を開始します。この時点で、Sync Framework は、2 つのプロバイダに対して、必要な呼び出しをすべて行って同期を実行します。
同期中、SyncOrchestrator オブジェクトも KnowledgeSyncProvider オブジェクトも、イベントを生成します。イベントを受信するには、イベント ハンドラ メソッドを実装して登録する必要があります。
アンマネージ コードを使用した同期アプリケーションの実装
同期を開始するには、CLSID_SyncServices および IID_IApplicationSyncServices を CoCreateInstance 関数に渡した後、返された IApplicationSyncServices オブジェクトの IApplicationSyncServices::CreateSyncSession を呼び出すことによって、ISyncSession オブジェクトを作成します。
CreateSyncSession メソッドには、同期対象の 2 つのプロバイダの ISyncProvider インターフェイスを指定する必要があります。アプリケーションから、適切なメソッドを使用して、プロバイダのインターフェイスを取得するか作成します。ISyncSession オブジェクトを作成したら、ISyncSession::Start を呼び出して同期を開始します。この時点で、Sync Framework は、2 つのプロバイダに対して、必要な呼び出しをすべて行って同期を実行します。
同期中、ISyncSession オブジェクトはイベントを生成します。イベントを受信するには、ISyncCallback インターフェイスを実装し、それを ISyncSession::RegisterCallback で登録する必要があります。
参照
リファレンス
ISyncSession インターフェイス
ISyncProvider インターフェイス
IKnowledgeSyncProvider インターフェイス
ISynchronousDataRetriever インターフェイス
ISynchronousNotifyingChangeApplierTarget インターフェイス
IApplicationSyncServices インターフェイス
IProviderSyncServices インターフェイス
ISyncCallback インターフェイス
SyncOrchestrator
KnowledgeSyncProvider
IChangeDataRetriever
INotifyingChangeApplierTarget
SyncCallbacks