データ同期の基礎

Microsoft Sync Framework は、同期セッションと 2 つの同期プロバイダという、3 つの基本的なコンポーネントを使用して、データ ストア (レプリカ) を同期します。データを同期する際には、アプリケーションから同期セッションを作成し、それを同期元プロバイダと同期先プロバイダに渡します。同期セッションでは、同期元のレプリカで発生した新しい変更が、同期元プロバイダを使用して取得されます。また、取得された変更は、同期先プロバイダを使用して同期先のレプリカに適用されます。

開発の中心となる作業はプロバイダの作成です。プロバイダは、レプリカのメタデータやナレッジのほか、同期対象となる各項目のメタデータを管理します。対応するデータ ストアとの間で実際の項目データを転送するのもプロバイダの処理です。プロバイダは、Sync Framework のコンポーネントを使用し、同期元として機能する場合には変更を列挙し、同期先として機能する場合には競合を検出して、変更を適用します。

同期のアルゴリズム

一方向同期のアルゴリズムには、次の手順が含まれます。

  1. セッションが、同期先レプリカの現在のナレッジを取得し、同期元プロバイダに送信します。

  2. 同期元プロバイダが、同期先のナレッジに存在しない変更を列挙します。

  3. 同期元プロバイダが変更をセッションに送信します。

  4. セッションが競合を検出し、同期先プロバイダを通じて、変更を同期先レプリカに適用します。

2 つのレプリカ間の双方向同期は、2 回の一方向同期によって実現されます。

マネージ コード : Direction プロパティが DownloadAndUpload または UploadAndDownload に設定されている場合、SyncOrchestrator オブジェクトは一方向同期を 2 回実行します。

アンマネージ コード : アプリケーションは、それぞれの一方向同期について、ISyncSession オブジェクトを作成する必要があります。

メタデータの管理

それぞれのレプリカは、レプリカそのものとそのナレッジを表す、一連のメタデータを同期コミュニティに提供する必要があります (同期コミュニティとは、同期状態を互いに維持する一連のレプリカのことです)。レプリカごとに必要なメタデータとしては、レプリカ ID、現在のティック数、レプリカ キー マップ、現在のナレッジ、忘れられたナレッジ、競合ログ、廃棄標識ログなどがあります。レプリカは、同期対象となる各項目のメタデータも管理する必要があります。項目ごとに必要なメタデータとしては、グローバル ID、現在のバージョン、作成バージョンなどがあります。通常、同期に必要なメタデータは、同期プロバイダによって管理されます。ただし、レプリカの実装によっては、メタデータの管理を一部、独立したコンポーネントで処理した方がよい場合もあります (廃棄標識を同期中ではなく予定された時刻にクリーンアップするサービスなど)。

メタデータの詳細については、「メタデータの要件」を参照してください。

同期プロバイダ

プロバイダはレプリカのメタデータを管理する以外に、Sync Framework と連携しながら、変更を列挙したり、競合を検出したりします。また、レプリカの項目ストアとも連携します。たとえば、同期元プロバイダは、項目ストアと連携しながら項目データを送信します。一方、同期先プロバイダは、項目ストアと連携して変更を適用します。

マネージ コード : プロバイダは、KnowledgeSyncProviderIChangeDataRetriever、および INotifyingChangeApplierTarget の抽象メソッドおよび抽象プロパティを実装します。

アンマネージ コード : プロバイダは、IKnowledgeSyncProviderISyncProviderISynchronousDataRetriever、および ISynchronousNotifyingChangeApplierTarget の各インターフェイス (非同期プロバイダの場合は、それぞれ非同期バージョンのインターフェイス) を実装します。

同期プロバイダの詳細、およびこれらのインターフェイスの実装方法と使用方法については、「同期プロバイダ」を参照してください。

同期アプリケーション

同期アプリケーションは、同期セッション オブジェクトを作成して、それをプロバイダに接続し、同期ランタイムをホストするコンポーネントです。

マネージ コードを使用した同期アプリケーションの実装

同期を開始するには、SyncOrchestrator オブジェクトを作成します。次に、LocalProvider プロパティと RemoteProvider プロパティに対し、同期対象となる 2 つのプロバイダの SyncProvider インターフェイスを設定します。アプリケーションから、適切なメソッドを使用して、プロバイダのインターフェイスを取得するか作成します。SyncOrchestrator オブジェクトを作成したら、Synchronize を呼び出して同期を開始します。この時点で、Sync Framework は、2 つのプロバイダに対して、必要な呼び出しをすべて行って同期を実行します。

同期中、SyncOrchestrator オブジェクトも KnowledgeSyncProvider オブジェクトも、イベントを生成します。イベントを受信するには、イベント ハンドラ メソッドを実装して登録する必要があります。

アンマネージ コードを使用した同期アプリケーションの実装

同期を開始するには、CLSID_SyncServices および IID_IApplicationSyncServicesCoCreateInstance 関数に渡した後、返された 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

概念

メタデータの要件
同期プロバイダ
同期アプリケーション

その他のリソース

Microsoft Sync Framework