概要とシナリオ
Sync Framework は、データベース間の同期を可能にします。柔軟で使いやすい API を備えているので、オフライン環境やコラボレーション環境を対象とするアプリケーションを容易に構築できます。この API では、アプリケーションのアーキテクチャと要件に応じて、用意されているすべてのコンポーネントを使用することも、一部のみを使用することもできます。Sync Framework は、クライアント/サーバー トポロジ、クライアント対クライアント トポロジ、および混合トポロジをサポートしています。クライアント/サーバー トポロジでは、すべてのクライアントが中央サーバーと同期します。クライアント対クライアント トポロジではクライアントどうしが直接同期できます。中央サーバーを経由する必要はありません。混合トポロジは、クライアント対クライアント トポロジとクライアント/サーバー トポロジを組み合わせたものです。
同期シナリオ
モバイル ユーザーやリモート ユーザーをサポートする能力は、毎日の組織の運営で、ますます重要になってきています。ユーザーがオフィスにいるときと同じ情報にアクセスできるようにすることは、組織にとって非常に重要です。ほとんどの場合、これらのユーザーはラップトップ、オフィスのデスクトップ、Smartphone、または PDA を所有しています。VPN 接続など、何らかの方法で企業内ネットワークへ直接接続すれば、これらの機器から必要なデータへアクセスすることができます。このソリューションは、次に示す欠点により、ほとんどのリモート ユーザーにとって満足できるものではありません。
ネットワーク要件
ユーザーが情報にアクセスできるようにするには、データ アクセス中にリモート デバイスが企業ネットワークに継続的に接続している必要があります。自宅で作業しているようなユーザーにとっては、これは問題にはなりません。ただし、外回りの営業担当者などにとっては、これは難しくなります。たとえば、営業担当者が顧客を訪問していて、ネットワーク接続がないために在庫データにアクセスできない場合、この担当者は効果的に仕事をすることが非常に難しくなります。
データ アクセス速度
一般的な企業のクライアント/サーバー環境では、ユーザーは高速ネットワークにより情報にすばやくアクセスできます。ところがリモート ユーザーは、通常は速度が遅く信頼性の低いネットワークを経由して接続します。通常のソリューションでは、このユーザーに必要な各データは、デバイス上に永続化する手段がないため、必要になるたびにダウンロードすることが求められます。たとえば、販売担当者がアプリケーションを開くたびに製品リストをダウンロードする必要があるとすると、アプリケーションにこの情報を読み込む際にタイム ラグが発生し、フラストレーションのもとになります。
単一障害点
この種のソリューションでは、通常、1 台のサーバーにのみデータベースが配置されています。定期的なサーバーのダウンタイムまたはサーバーの障害のためにそのデータベースが使用不可になった場合、すべてのリモート ユーザーは自分のデータから切断されます。
サーバーのスケーラビリティ
リモートで作業するユーザーが増加するにつれて、企業サーバーのパフォーマンスが影響を受け、ハードウェアの追加が必要となります。
断続的に接続されるアプリケーション
これまでに説明したソリューションの 1 つの代替策は、断続的に接続されるアプリケーションを実装することです。この場合でもリモート ユーザーはデータにアクセスできますが、必要な情報はローカルに保存されます。ローカル データベースにデータを読み込むために、通常、断続的に接続されるアプリケーションは、データ同期を使用します。
データ同期は、一方のデータベース (クライアント データベースなど) に格納されている情報を定期的に取り込み、変更内容を別のデータベース (サーバー データベースなど) に反映させる機能です。同期ベースのソリューションの利点は、ユーザーが情報にアクセスするために継続的にネットワークに接続する必要がないことです。データはローカルで格納されるので、中央のデータベースから処理がオフロードされている間、ユーザーはデータに常にアクセスできます。さらに、ネットワーク速度に制限されることもなくなり、ローカル コンピューターの速度でデータにアクセスできるようになります。
クライアント対クライアントの同期では、サーバーを経由するすべての変更に依存しない同期が行われるので、単一障害点が回避されます。多くのアプリケーション処理を各クライアントにプッシュできる機能は、サーバーのスケーラビリティの問題に対処する際にも役立ちます。
Sync Framework は同期プロバイダーを使用して、同期対象の各データベースと通信を行います。Sync Framework データベース プロバイダーは、ADO.NET データ プロバイダーと同じように (データベース固有の実装を意識しなくて済むよう)、他の Sync Framework コンポーネントとデータベースとの間のクッションとして働きます。Sync Framework には 5 つのデータベース プロバイダーが付属し、オフラインとコラボレーションという 2 とおりのシナリオをサポートしています。次の図は、オフライン環境でのクライアント/サーバー トポロジを示しています。接続が可能になると、クライアントは中央サーバーに接続してデータを同期します。
この種の断続的に接続されるアプリケーションの一般的な拡張機能に、コラボレーション シナリオのサポートがあります。これらは、中央のハブを経由せずに、2 つのデータベースをピア ツー ピアで同期できるシナリオです。次の図は混合トポロジを示しています。中央サーバーがクライアントと同期する一方、クライアントどうしでの相互同期も可能です。このようなトポロジでは、プロジェクトに関する注意事項をユーザー間で共有するためのアプリケーションを使用できます。通常、プロジェクト チームのメンバーは、そのプロジェクトに必要なデータをローカルにコピーしておきます。データを変更したときは、サーバーと同期して変更をアップロードしたり、他のチーム メンバーと変更内容を交換したりできます。
Sync Framework に付属する 5 つのデータベース同期プロバイダーは、次の 2 つに分類できます。
DbServerSyncProvider および SqlCeClientSyncProvider はオフラインのシナリオをサポートします。これらのプロバイダーには次の特性があります。
クライアント/サーバー トポロジに適している。
常にペアで使用される。たとえば、ServerSyncProvider の 2 つのインスタンスを使用して、2 つのサーバー データベースを同期することはできません (この場合、SqlSyncProvider または DbSyncProvider を使用します)。
コラボレーション プロバイダーに比べて構成が単純。ただし、他の Sync Framework プロバイダーのトポロジに参加することはできません。
オフライン同期の詳細については、「オフラインのシナリオ」を参照してください。
SqlSyncProvider、SqlCeSyncProvider、および DbSyncProvider はコラボレーションのシナリオをサポートします。SQL Server データベースと SQL Server Compact データベースの同期には、それぞれ SqlSyncProvider および SqlCeSyncProvider が使用されます。DbSyncProvider は、通常、SQL Server 以外のデータベースとの同期に使用されます。これらのプロバイダーには次の特性があります。
ピア ツー ピア トポロジと混合トポロジに適している。複雑なバッチ処理など、より高度な機能が必要とされる場合は、クライアント/サーバー トポロジで使用することもできます。
より柔軟な用途が可能。たとえば、DbSyncProvider の 2 つのインスタンスを同期できるほか、SqlSyncProvider のインスタンスと SqlCeSyncProvider のインスタンスを同期させることもできます。
Sync Framework メタデータを使用して、他の Sync Framework プロバイダーが存在するトポロジに参加することができる。
データ コラボレーションの詳細については、「コラボレーションのシナリオ」を参照してください。