メタデータの要件
Sync Framework では、同期対象となる各レプリカおよび各項目について、特定のメタデータが必要になります。
各レプリカに必要なメタデータ
各レプリカには、次の表に示した一連のメタデータが格納されている必要があります。
メタデータ要素 | 説明 |
---|---|
レプリカ ID |
同期コミュニティにおけるレプリカの一意の識別子。レプリカ ID はフレキシブル ID であるため、コミュニティのスキーマによって定義することが可能です。16 バイトの GUID をお勧めします。Sync Framework のメソッドに渡されるレプリカ ID の形式は、プロバイダによって指定された形式と一致している必要があります。 マネージ コード : 形式は SyncIdFormatGroup クラスの ReplicaIdFormat プロパティによって指定されます。ID は SyncId クラスで表されます。 アンマネージ コード : 形式は ID_PARAMETERS 構造体 構造体の replicaId フィールドによって指定されます。ID は SYNC_ID 構造体で表されます。 |
現在のティック数 |
レプリカの現在のティック数。これは概念上の数値である点に注意してください。項目ごとのナレッジにある最新のローカル バージョンから推論されるか、その他の、レプリカから利用できる単調に増加する値が使用されます。たとえば、クロック タイムの値がリセットされることがなければ、レプリカに現在のクロック タイムを使用することも可能です。 マネージ コード : UInt64 で表されます。 アンマネージ コード : ULONGLONG で表されます。 |
レプリカ キー マップ |
レプリカ ID と 4 バイト キーのマッピング。メタデータではレプリカ ID (16 バイトの GUID を推奨) が繰り返し出現するため、テーブルを使用して、より小さい 4 バイトのキーにマップすることによって、レプリカ ID を表現した方が効率的です。これらのキーは、他の場所で特定のレプリカへの参照が必要になったときに使用されます。 マネージ コード : ReplicaKeyMap を使用して表されます。 アンマネージ コード : IReplicaKeyMap を使用して表されます。 |
現在のナレッジ |
レプリカが特定のスコープに関して把握しているバージョン情報の要約。レプリカのナレッジは、メタデータ サービスを通じて操作されます。直接操作することは避けてください。 マネージ コード : SyncKnowledge を使用して表されます。 アンマネージ コード : ISyncKnowledge を使用して表されます。 |
忘れられたナレッジ |
パートナー レプリカが、削除された項目について把握していない場合に、その事実を検出できるようにします。たとえば、項目の廃棄標識がクリーンアップされた場合に、このようなことが起こります。忘れられたナレッジは、メタデータ サービスを通じて操作されます。 マネージ コード : ForgottenKnowledge を使用して表されます。 アンマネージ コード : IForgottenKnowledge を使用して表されます。 |
競合ログ |
変更の列挙後、競合が検出され、解決されなかった場合に記録される競合のログ。レプリカには、競合ログが維持される必要があります。競合ログの表現はレプリカによって決定され、必ずしもこのログへのアクセス権を Sync Framework に与える必要はありません。 |
廃棄標識ログ |
レプリカからの項目の削除に関する情報を保存するログ。削除変更を同期コミュニティに正しく反映し、削除された項目が意図せずに再挿入されることを防ぎます。レプリカには、廃棄標識ログが維持される必要があります。廃棄標識ログの表現はレプリカによって決定され、必ずしもこのログへのアクセス権を Sync Framework に与える必要はありません。 |
各項目に必要なメタデータ
同期対象となる各項目には、次の表に示した一連のメタデータが存在する必要があります。
メタデータ要素 | 説明 |
---|---|
グローバル ID |
レプリカに格納されている項目の識別子。グローバル ID はレプリカによって生成されます。したがって、レプリカでは、列挙がより効率的になるようなグローバル ID を割り当てることができます。たとえば、コミュニティでは、そのグローバル ID を 8 バイトのプレフィックスを持つ GUID 形式として定義できます。さらに、このプレフィックスを使用すれば、グローバル ID の並べ替え順序を制御することが可能です。これにより、プロバイダは、範囲に基づいて容易に変更を列挙できるようになります。項目を順序付けされたグループとして表現すると、1 つの範囲に多数の項目を含めることができるため、ナレッジの構造がよりコンパクトになります。グローバル ID の形式の詳細については、「フレキシブル ID」を参照してください。 マネージ コード : 形式は SyncIdFormatGroup クラスの ItemIdFormat プロパティによって指定されます。ID は SyncId クラスで表されます。 アンマネージ コード : 形式は ID_PARAMETERS 構造体 構造体の itemId フィールドによって指定されます。ID は SYNC_ID 構造体で表されます。 |
現在のバージョン |
特定の項目の最新の更新バージョン。現在のバージョンには、最近項目を更新したレプリカのキーと、変更が加えられたときのレプリカのティック数が含まれています。 項目の変更単位が使用されると、変更単位ごとに現在のバージョンが保存されます。たとえば、連絡先の住所フィールドと電話番号フィールドには、それぞれ異なる変更単位のバージョン番号が存在します。 マネージ コード : SyncVersion で表されます。 アンマネージ コード : SYNC_VERSION で表されます。 |
作成バージョン |
項目が作成された時点のバージョン。作成バージョンには、項目を作成したレプリカのキーと、項目が作成されたときのレプリカのティック数が含まれています。 マネージ コード : SyncVersion で表されます。 アンマネージ コード : SYNC_VERSION で表されます。 |
ストレージ要件
グローバル ID の形式はレプリカ側で決められるため、各項目のメタデータを格納するために必要な容量はそれぞれ異なります。ただし、推奨される形式 (GUID + 8 バイトのプレフィックス) を使用した場合、次の表に示すように、必要なストレージの合計容量は 48 バイトになります。
項目 | バイト |
---|---|
グローバル ID |
24 (GUID + 8 バイトのプレフィックス) |
現在のバージョン |
12 (4 バイトのレプリカ キー + 8 バイトのティック数) |
作成バージョン |
12 (4 バイトのレプリカ キー + 8 バイトのティック数) |
合計 48 バイト |
参照
リファレンス
IReplicaKeyMap インターフェイス
SYNC_ID 構造体
SYNC_GID 構造体
SYNC_VERSION 構造体
ReplicaKeyMap
SyncId
SyncGlobalId
SyncIdFormat
SyncIdFormatGroup
SyncVersion