Sync Framework 2.0 の新機能

Sync Framework 2.0 では、次の領域で機能の追加と拡張が行われています。

  • データベース プロバイダー

    • SQL Server 用と SQL Server Compact 用の新しいプロバイダー

    • 堅牢性の高いメモリ ベースのバッチ化

    • 準備と管理の API

    • スナップショット初期化

    • トポロジの形態に関する柔軟性

    • パフォーマンスの向上

  • ファイル同期プロバイダー

    • データ変換
  • カスタム プロバイダー

    • 簡易プロバイダー

    • プロバイダー間でのデータ変換

    • フィルター

    • 競合の処理

    • トレース

    • 変更適用サービス

    • Metadata Storage Service シリアライザー

    • プロバイダー コンバーター

    • ナレッジの強化

    • 互換性レベル

    • 古い形式のインターフェイス

データベース プロバイダー

Sync Framework 2.0 では、2 つの新しいデータベース プロバイダーや、同期と管理に関連するいくつかの重要な機能が追加されているほか、パフォーマンスも大幅に向上しています。

SQL Server 用と SQL Server Compact 用の新しいプロバイダー

Sync Framework 2.0 には、次の 2 つの新しいデータベース プロバイダーが含まれています。

  • SqlCeSyncProvider は、SQL Server Compact データベースの同期に使用されます。

    このプロバイダーを使用すると、中央サーバーとの同期だけでなく、SqlCeClientSyncProvider では不可能な他のクライアントとの同期も実行できます。これにより、中央サーバーに接続していないチームが互いに同期するコラボレーションのシナリオなどの新しいシナリオを開発の対象にすることができます。

  • SqlSyncProvider は、SQL Server Express を含むその他のエディションの SQL Server の同期に使用されます。

    サーバーとしてもクライアントとしても使用できるこのプロバイダーは、SQL Server データベースの同期に伴う負担を大幅に軽減します。SqlSyncProvider は、DbSyncProvider と同等の機能を備えていますが、必要とされるコードや、Sync Framework がデータの同期に使用するクエリに関する知識は、はるかに少なくなっています。SQL Server 以外のデータベースでは、引き続き DbSyncProvider を使用できます。

これらの新しいプロバイダーは、Sync Framework の他のすべてのプロバイダーと同様に、クライアント/サーバー型、ピア ツー ピア型など、あらゆる形態のトポロジで使用できます。この 2 つのプロバイダーの詳細については、「コラボレーション同期を構成して実行する方法 (SQL Server)」を参照してください。

堅牢性の高いメモリ ベースのバッチ化

以前のバージョンの Sync Framework と Sync Services for ADO.NET は、Sync Framework ランタイムによって呼び出されるバッチ化ロジックを開発者が独自に定義できるようになっていました。しかし、この方法には、変更をバッチに分割することに関連する本質的な複雑さが伴うほか、クライアントとサーバーの間のネットワーク上でのやり取りが増える、リソースの競合の問題を解決できない (バッチは、各バッチが消費するメモリの量ではなく、同期される行の数に基づいているため) などの欠点がありました。

Sync Framework 2.0 には、これらすべての問題に対処するために、より完全かつ堅牢なバッチ化 API が用意されています。この API のいくつかのプロパティに基づいて Sync Framework ランタイムが変更をバッチに分割するため、開発者が自分でバッチ化ロジックを記述する必要はなくなります。また、同期される行の数ではなく消費されるメモリによってバッチが定義されるようになったため、ほとんどの一般的なシナリオでメモリ不足の問題が解消されます。詳細については、「変更をバッチで配信する方法 (SQL Server)」を参照してください。

準備と管理の API

以前は Visual Studio tooling でしか公開されていなかった準備と初期化のアクティビティが、データベース プロバイダー API に追加されました。たとえば、Sync Framework が必要とする変更追跡テーブルやトリガーを追加して既存のデータベースを準備する機能や、空のデータベースにユーザー スキーマを作成して、既に準備されている別のサーバー データベースやクライアント データベースに基づいてそのスキーマを準備する機能が含まれています。詳細については、「コラボレーション同期を構成して実行する方法 (SQL Server)」を参照してください。

データベースのバックアップ/復元やメタデータのクリーンアップなどの一般的なタスクもこの API から直接実行できるため、開発者がそのロジックを自分で実装する必要はなくなります。詳細については、「データベースのバックアップと復元方法 (SQL Server)」および「コラボレーション同期のメタデータをクリーンアップする方法 (SQL Server)」を参照してください。

スナップショット初期化

SQL Server Compact クライアント データベースが別のデータベースから変更の受け取りを開始するためには、Sync Framework が必要とする変更追跡インフラストラクチャだけでなく、クライアント データベースに、テーブル スキーマと初期データが格納されている必要があります。Sync Framework は、次の 2 とおりの方法でデータベースを初期化できるようになっています。

  • クライアント データベースの完全初期化

    完全初期化は、適切とされる場合もありますが、クライアントのリソースが限られている場合には理想的な方法とはいえません。データベース スキーマをゼロから作成して、低速なネットワーク接続ですべてのデータを読み込むと、初回の同期に時間がかかったり、メモリ不足エラーが発生したりする可能性があります。

  • クライアント データベースのスナップショット初期化 (既存のクライアント データベースを使用)

    Sync Framework 2.0 で導入されたスナップショット初期化は、クライアント データベースの初期化に要する時間を短縮することを目的とした初期化方法です。いずれかのクライアント データベースを完全初期化を使って初期化した後、他のデータベースは、この 1 つ目のクライアント データベースの "スナップショット" を使用して初期化できます。スナップショットは、テーブル スキーマ、データ (オプション)、および変更追跡インフラストラクチャを備えた特別な SQL Server Compact データベースです。スナップショット初期化を使用すると、初回の同期の時間を格段に短縮し、メモリの競合を大幅に削減できます。詳細については、「コラボレーション同期を構成して実行する方法 (SQL Server)」の「クライアントの準備」を参照してください。

トポロジの形態に関する柔軟性

以前のバージョンの Sync Services for ADO.NET は、多数のクライアントが中央サーバーを介して変更を同期する特定の形態のトポロジでしか使用できませんでした。

今回、新たに Sync Framework をベースとするようになったため、開発の対象にできるシナリオの幅が大きく広がりました。たとえば、クライアント間での変更の同期が必要とされるコラボレーションのシナリオや、一連の POS (point-of-sale) 端末がブランチ サーバーと同期され、さらにブランチ サーバーが会社の中央サーバーと同期される、ブランチ オフィスのシナリオを対象にすることができます。

新しいデータベース プロバイダーは Sync Framework をベースとしているため、Azure SQL Data Services などの新しい種類のストアとも変更を同期できます。

パフォーマンスの向上

このリリースの新しいデータベース プロバイダーは、数千のクライアントと数百の同時的な同期処理を 1 つのサーバーでサポートする大規模なスケールアウトのシナリオで徹底的にテストされています。その結果、内部で数々のパフォーマンスの強化が行われ、マージ レプリケーションのようなエンド ツー エンドのソリューションに匹敵する幅広い機能を持つ Sync Framework のデータベース プロバイダーで、リモート データ アクセス (RDA) などの他の Microsoft テクノロジと同等のパフォーマンスが実現されています。

ファイル同期プロバイダー

Sync Framework 2.0 には、あらゆる種類のカスタム プロバイダーで使用できるデータ変換 API に加えて、ファイル同期プロバイダー専用の変換 API も用意されています。詳細については、「ファイル同期プロバイダーとその他のプロバイダーの同期」、「IFileDataRetriever」(マネージ コードの場合)、および「IFileDataRetriever」(アンマネージ コードの場合) を参照してください。

カスタム プロバイダー

Sync Framework 2.0 では、標準のカスタム プロバイダーの機能が大幅に強化されています。また、簡易プロバイダーという新しい種類のカスタム プロバイダーが導入されています。

簡易プロバイダー

簡易プロバイダー API を利用すると、プロバイダーの開発に必要な作業の量を減らすことができます。これは、データ ソースに同期関連の機能 (変更追跡など) がほとんどない場合に顕著です。この API を使用すれば、同期に関する専門知識がなくてもプロバイダーを記述できます。簡易プロバイダーのコードの大部分は、データ ソースとのやり取りに必要なコードです。詳細については、「簡易カスタム プロバイダーの実装」および「カスタム プロバイダーの基礎」を参照してください。

マネージ コードの新しい重要な型

すべての型の一覧は、「Microsoft.Synchronization.SimpleProviders」を参照してください。

アンマネージ コードの新しい重要なインターフェイス

すべての型の一覧は、「Sync Framework の簡易プロバイダー コンポーネント」を参照してください。

プロバイダー間でのデータ変換

場合によっては、同期プロバイダーが同期するデータ (売上データなど) の型は同じでも、各プロバイダーが必要とするデータ形式が異なることがあります。このシナリオに対処するために、Sync Framework では、各プロバイダーが必要とする形式にデータを変換するインターフェイスを実装できます。詳細については、「プロバイダー間でのデータの変換」を参照してください。

マネージ コードの新しい型とプロパティ

アンマネージ コードの新しいインターフェイス

フィルター

フィルターは、同期するデータを制御するために使用されます。Sync Framework 2.0 では、同期する変更単位を制御するフィルターと、開発者が作成するカスタム フィルターが新たにサポートされています。Sync Framework 2.0 には、同期時に使用するフィルターをプロバイダーがネゴシエートする機能も追加されました。

詳細については、「同期データのフィルター設定」を参照してください。

変更単位フィルター

変更単位は、連絡先項目の電話番号など、同期する項目の一部です。同じ項目でも、レプリカごとに異なる形で表現されることがあります (一部のレプリカでは、項目が他のレプリカよりも詳細かつ完全な形で表現されているなど)。たとえば、同期コミュニティは連絡先情報を交換し、name、phone number、および address の変更単位を定義します。コミュニティ内のレプリカの 1 つは、name と phone number だけを格納できるモバイル デバイスです。Sync Framework では、このシナリオに対処するために、レプリカに格納できるものをデータのサブセットに限定する変更単位フィルターをプロバイダーで指定できます。このフィルター選択を効率的に処理できるように、同期メタデータと同期プロセス双方の機能が強化されました。

マネージ コードの新しい型

アンマネージ コードの新しいインターフェイスとメソッド

カスタム フィルター

カスタム フィルターは、形式に特に決まりのない、開発者が作成するフィルターです。"フィルター選択されたレプリカ" には、フィルターにある項目の項目データだけが格納されます。その例として、三つ星以上と評価された歌だけが保存されるメディア ストレージ レプリカが挙げられます。歌に対する評価が変更されると、項目がフィルターに追加されるか、フィルターから除外されることがあります。開発者は、フィルター選択されたレプリカに格納する項目データを制御するためのカスタム フィルターを定義できます。"フィルター追跡レプリカ" は、フィルターに含まれている項目やフィルター内外に最近移動された項目を特定できる、コミュニティ内のもう 1 つのレプリカです。フィルター追跡レプリカには、フィルターにない項目の項目データが格納されることがあります。Sync Framework は、フィルターにある項目のみをフィルターに関する情報と共に送信することで、フィルター追跡レプリカからフィルター選択されたレプリカへの効率的な同期をサポートします。Sync Framework は、フィルター選択されたレプリカからフィルター追跡レプリカに変更が送信されると、フィルター追跡レプリカのナレッジとその他のメタデータも適切に計算します。

簡易プロバイダー、または制約の競合を報告したり変更適用サービスを利用したりするプロバイダーではカスタム フィルターを使用できないことに注意してください。このようなプロバイダーでカスタム フィルターを使用すると、予期しない結果が生じる可能性があります。

マネージ コードの新しい重要な型

プロバイダーは次の型を実装します。

Sync Framework は次の型を実装します。

すべての型の一覧は、「Microsoft.Synchronization」を参照してください。

アンマネージ コードの新しい重要なインターフェイス

プロバイダーは次のインターフェイスを実装します。

Sync Framework は次のインターフェイスを実装します。

すべてのインターフェイスの一覧は、「Sync Framework のコア コンポーネント」を参照してください。

プロバイダーでネゴシエートされるフィルター

同期先データ ソースに使用可能なデータのサブセットだけを格納する場合は、同期元プロバイダーでフィルターを使用し、同期先に格納可能なデータだけを列挙した方が効率的です。フィルターのネゴシエーションを行うことで、同期先プロバイダーは、同期元プロバイダーに対し、1 つ以上のフィルターを使用して変更を列挙するように指定できます。同期元プロバイダーは、フィルターを受け入れることも、拒否することもできます。要求されたフィルターがいずれも同期元プロバイダーでサポートされていない場合、同期先プロバイダーでは、すべてのデータを受信し、自身でフィルター処理を行うことを選択できます。Sync Framework は、フィルターの使用をネゴシエートするプロバイダーを適切に呼び出します。

マネージ コードの新しい型

アンマネージ コードの新しいインターフェイス

競合の処理

Sync Framework 2.0 では、制約の競合、ログに記録された競合、最後に書き込みを行った方を優先させる競合解決方法の実装について、サポートが強化されています。

制約の競合

Sync Framework 2.0 では "制約の競合" のサポートが強化されています。制約の競合は、項目または変更単位が持つ制約 (フォルダーの関係や、ファイル システムにおいて、まったく同じ名前が付けられたデータの場所など) に違反する競合です。同期先プロバイダーは、制約の競合を Sync Framework に報告できます。また、Sync Framework コンポーネントを使用して競合を解決し、同期先レプリカに解決方法をどのように適用するかを決定できます。

カスタム フィルターや変更適用サービスを利用するプロバイダーでは制約の競合を使用できないことに注意してください。このようなプロバイダーで制約の競合を使用すると、予期しない結果が生じる可能性があります。

詳細については、「制約の競合の検出および解決」を参照してください。

マネージ コードの重要な新しい型と更新された型

同期先プロバイダーは、次の新しいクラスを実装します。

同期アプリケーションは、次のクラスの新しいメソッドを実装します。

Sync Framework は、次のクラスの新しいメンバーを実装します。

すべての型の一覧は、「Microsoft.Synchronization」を参照してください。

アンマネージ コードの新しい重要なインターフェイス

同期先プロバイダーは、次の新しいインターフェイスを実装します。

同期アプリケーションは、次の新しいインターフェイスを実装します。

Sync Framework は次の新しいインターフェイスを実装します。

すべてのインターフェイスの一覧は、「Sync Framework のコア コンポーネント」を参照してください。

競合のログ記録

ユーザーが競合を確認してその解決方法を決定する必要がある場合など、同期セッションとは別に競合を解決できるように、競合をログに記録しておくと便利です。Sync Framework 2.0 は、一連の競合ログ インターフェイスを定義し、ログ内の競合の管理に役立つコンポーネントを提供します。Sync Framework は、競合ログを含んでいないレプリカ用の競合ログ インターフェイス実装も提供します。この実装はメモリ内で動作し、制約の競合処理の結果として発生した一時的な競合を格納する目的で使用されます。詳細については、「競合のログ記録と管理」を参照してください。

マネージ コードの新しい型

プロバイダーは、次の新しいクラスを実装します。

Sync Framework は、次の新しいクラスを実装します。

アンマネージ コードの新しいインターフェイス

プロバイダーは、次の新しいクラスを実装します。

Sync Framework は、次の新しいクラスを実装します。

最後に書き込みを行った方を優先させる競合の解決方法

アプリケーションでは、"同時実行の競合" (項目が複数のレプリカで更新された場合の競合) を解決するために、変更の箇所に関係なく、最後に加えられた変更を保持することができます。Sync Framework 2.0 は、同期元レプリカに対する変更が実行された時間と、同期先レプリカに対する変更が実行された時間をアプリケーションで取得するメカニズムを提供することで、この解決方法をサポートしています。アプリケーションでは、この 2 つの時間を比較し、最後の変更を適用する競合解決アクションを指定できます。

詳細については、「同時実行の競合の検出および解決」を参照してください。

マネージ コードの新しい型

プロバイダーは、次の新しいインターフェイスを実装します。

アンマネージ コードの新しいインターフェイス

プロバイダーは、次の新しいインターフェイスを実装します。

トレース

Sync Framework では、いくつかのコンポーネントの実行をトレースできます。これは、アプリケーションのデバッグに便利です。ほとんどの Sync Framework コンポーネントのトレースは、Event Tracing for Windows (ETW) インフラストラクチャを使ってネイティブ コード レベルで行われます。マネージ API はネイティブ API の薄いラッパーにすぎないので、API のマネージ バージョンを使用する場合でも、ETW を使用します。詳細については、「Sync Framework コンポーネントのトレース」を参照してください。

Sync Framework データベース プロバイダーは .NET Framework の実装に基づいたマネージ トレースを提供します。詳細については、「同期プロセスをトレースする方法」を参照してください。

変更適用サービス

Sync Framework には、ほとんどのアプリケーションが変更をレプリカに適用するために使用する、変更適用元の実装が用意されています。Sync Framework 2.0 では、変更適用元と同じアクションをより詳細なレベルで実行できる変更適用サービスが導入されました。同期先プロバイダーで標準の変更適用元よりも柔軟な手段が必要な場合は、変更適用サービスを使用して、必要なアクションだけを実行できます。

制約の競合を報告するプロバイダーや、カスタム フィルターを利用するプロバイダーでは、変更適用サービスを使用できないことに注意してください。このようなプロバイダーで変更適用サービスを使用すると、予期しない結果が生じる可能性があります。

詳細については、「変更適用サービスの使用による変更の適用」を参照してください。

マネージ コードの新しい型

アンマネージ コードの新しいインターフェイスと列挙体

Metadata Storage Service シリアライザー

Metadata Storage Service では、簡易データベースにレプリカと項目メタデータを格納します。メタデータは特定のテーブル スキーマにバイナリ形式で格納されますが、この形式は、新しいバージョンの Sync Framework がリリースされると変更される場合があります。また、データベースのカスタム プロバイダー フィールドは、開発者が新しいプロバイダーをリリースしたときに変更される場合があります。異なるバージョン間の相互運用性を高めるために、Sync Framework には、正規のファイル形式と一連のシリアル化インターフェイスが用意されています。これらを使用すると、新旧バージョン間で通常の範囲で変更されているメタデータの互換性を保つことができます。詳細については、「バージョンが異なるコンポーネントのメタデータへのアクセス」および「メタデータ ストアのアップグレード」を参照してください。

マネージ コードの新しい型

アンマネージ コードの新しいインターフェイス

プロバイダー コンバーター

カスタム プロバイダーは、通常は IKnowledgeSyncProvider から派生しますが、ISyncProvider から直接派生することもできます。ただし、同期の管理に ISyncSession オブジェクトを使用する場合 (これが一般的な方法です) は、プロバイダーは IKnowledgeSyncProvider から派生している必要があります。ISyncProvider から派生するプロバイダーを同期セッションに参加させることができるように、Sync Framework では、実行時にプロバイダーを IKnowledgeSyncProvider に変換できます。

アンマネージ コードの新しいインターフェイスとメソッド

ナレッジの強化

Sync Framework 2.0 では、ナレッジ オブジェクトの柔軟性と効率が向上しています。

ナレッジ構造

Sync Framework 2.0 は、ナレッジ オブジェクトの基になる構造をより柔軟で効率的な形式に変更し、新しいナレッジ要素にアクセスするための新しいインターフェイスを定義します。旧バージョンとの互換性を維持するため、新しいナレッジ オブジェクトは、Sync Framework 1.0 ナレッジ メソッドの出力のエミュレートも行います。

マネージ コードの新しい型と更新された型

アンマネージ コードの新しいインターフェイスと列挙体

ナレッジ クッキー

Sync Framework 2.0 にはナレッジ クッキーが追加されています。ナレッジ クッキーは、ナレッジを読み取り専用で簡単に表したもので、パフォーマンスが特に重要な場合、高速比較に使用できます。

マネージ コードの新しい型とメンバー

アンマネージ コードの新しい列挙体とメソッド

互換性レベル

異なるバージョンのコンポーネントが引き続き正常に相互運用できるように Sync Framework にはメタデータの互換性レベルが含まれています。詳細については、「Sync Framework の旧バージョンとの互換性と相互運用性」を参照してください。

マネージ コードの新しい型とメンバー

アンマネージ コードの新しい列挙体とメソッド

古い形式のインターフェイス

次のインターフェイスは、互換性のために残されています。新しい開発では使用しないでください。Sync Framework 2.0 でも引き続き問題なく使用できますが、今後のバージョンで削除される可能性があります。

アンマネージ コードの古い形式のインターフェイス

参照

概念

Microsoft Sync Framework
Sync Framework を使用することの利点
適切な Sync Framework コンポーネントの選択