Share via


Flexible IDs

Mit flexiblen IDs werden Replikate, Elemente oder Änderungseinheiten identifiziert. Sync Framework unterstützt die folgenden Typen flexibler IDs:

  • ID mit festgelegter Länge

    Eine ID mit festgelegter Länge weist bei jeder Verwendung dieselbe Länge auf. Die Länge wird im ID-Formatschema angegeben.

  • ID mit variabler Länge

    Eine ID mit variabler Länge kann bei jeder Verwendung in der Länge variieren. Die maximale Länge wird im ID-Formatschema angegeben.

Verwalteter Code Eine ID wird durch die SyncId-Klasse dargestellt. Diese Klasse enthält die ID sowie einen Wert, der angibt, ob die Länge der ID variabel ist.

Nicht verwalteter Code Eine ID wird als Bytearray dargestellt. IDs mit variabler Länge werden durch die SYNC_ID-Struktur dargestellt. Diese Struktur enthält die Länge der ID und die als Bytearray dargestellte ID.

ID-Schema

Die ID-Formate werden in einem Schema definiert, in dem die folgenden Informationen zu jeder ID im System angegeben werden:

  • Ob die Länge der ID festgelegt oder variabel ist.

  • Die Größe, wenn die Länge der ID festgelegt ist, oder die maximale Größe, wenn die Länge der ID variabel ist.

Verwalteter Code Das ID-Formatschema wird mit der SyncIdFormatGroup-Klasse angegeben.

Nicht verwalteter Code Das ID-Formatschema wird mit der ID_PARAMETERS-Struktur angegeben.

Dieses Schema muss für verschiedene Sync Framework-Methoden bereitgestellt werden und wird verwendet, um sicherzustellen, dass alle Objekte dieselben ID-Schemainformationen verwenden.

In einer Synchronisierungssitzung werden die Schemas beider Anbieter abgefragt. Die Schemas werden dann verglichen, um sicherzustellen, dass beide Anbieter das gleiche Schema verwenden. Ist dies nicht der Fall, wird die Sitzung nicht erstellt.

Verwalteter Code Die Sitzung ruft das Schema eines Anbieters mithilfe der IdFormats-Eigenschaft ab.

Nicht verwalteter Code Die Sitzung ruft das Schema eines Anbieters mithilfe der ISyncProvider::GetIdParameters-Methode ab.

Hinweis

Das Format einer ID, die an eine Sync Framework-Methode übergeben wird, muss mit dem im ID-Formatschema angegebenen Format übereinstimmen. Andernfalls schlägt die Methode fehl.

Empfohlenes Format für globale IDs

Für jedes Element im Synchronisierungsbereich ist eine globale ID erforderlich, die in einer Synchronisierungscommunity eindeutig sein muss. Eine globale ID ist eine flexible ID und kann daher in jedem Format angegeben werden. Da in den Metadaten jedoch eine geordnete Gruppe von IDs als einzelner Bereich dargestellt werden kann, sind die Metadaten kompakter, wenn IDs als geordnete Gruppen aufgelistet werden. Durch die Verwendung von Bereichen wird die Verwaltung von Metadaten außerdem effizienter. Daher kann es nützlich sein, die Reihenfolge der IDs logisch an die für die Enumeration geeignete Reihenfolge anzupassen. Als Format für eine globale ID wird eine 16-Byte-GUID mit einem 8-Byte-Präfix empfohlen, wie z. B. die verwaltete SyncGlobalId-Klasse oder die nicht verwaltete SYNC_GID-Struktur.

Besondere Überlegungen für hierarchische Daten

In Situationen, in denen die zu synchronisierenden Elemente eine Hierarchie aufweisen, kann es sinnvoll sein, im ID-Präfix eine monoton steigende Zahl, z. B. die Uhrzeit, zu verwenden. Da übergeordnete Elemente in der Regel für untergeordnete Elemente erstellt werden, befinden sich übergeordnete Elemente weiter oben in der Reihenfolge der Enumeration. Dadurch muss ein Anbieter weniger Elemente behandeln, die sich nicht in der Reihenfolge befinden, in der sie angewendet werden müssen.

Ein Ansatz zum Zuweisen globaler IDs für hierarchische Daten ist folgender:

  1. Erstellen Sie einen Zähler, der groß genug ist, um eine Indizierung aller eindeutigen Elemente im Replikat durchzuführen.

  2. Durchlaufen Sie das System beginnend beim Stamm des Bereichs, und bevorzugen Sie dabei Tiefe vor Breite.

  3. Generieren Sie für jedes Element (übergeordnet oder untergeordnet) eine GUID.

  4. Versehen Sie die GUID mit der Uhrzeit als Präfix.

Neu erstellten Elemente können ebenfalls mit dieser Methode globale IDs zugewiesen werden, unabhängig von zugehörigen Containern oder geschachtelten einzelnen Elementen.

Speicherbehandlung in nicht verwaltetem Code

IDs werden als Zeiger auf Bytearrays dargestellt. Daher genügt bei IDs mit festgelegter Länge eine Konvertierung der für einen Byte-Zeiger verwendeten ID. Bei IDs mit variabler Länge müssen die ID-Daten mit der Puffergröße als Präfix versehen werden, wie in der SYNC_ID-Struktur.

Hinweis

Sync Framework behält niemals einen Verweis auf eine ID bei, die von einem Aufrufer zugeordnet wird. Wenn Sync Framework eine ID behalten muss, wird eigener Speicher für die ID zugeordnet, und die ID wird intern kopiert. Aufrufer sind für das Zuordnen und Freigeben von Speicher für IDs verantwortlich.

IDs als Rückgabewerte in nicht verwaltetem Code

IDs mit variabler Länge werden von Sync Framework-Methoden in einem Prozess mit zwei Aufrufen zurückgegeben:

  1. Die Methode wird aufgerufen, um die Größe der ID zu bestimmen.

  2. Der Aufrufer ordnet Speicher zu, ruft die Funktion erneut auf und stellt dabei den neu zugeordneten Puffer und dessen Größe bereit.

Der Benutzer kann diesen Prozess optimieren, indem er entweder einen Puffer der richtigen Größe oder einen Puffer der maximalen Größe zuordnet. In diesem Fall ist der erste Aufruf unnötig, obwohl der Aufrufer immer das zurückgegebene HRESULT überprüfen sollte, um sicherzustellen, dass der Puffer die korrekte Größe aufweist.

Methoden, die IDs mit festgelegter Länge zurückgeben, verwenden diesen Prozess mit zwei Schritten nicht. Stattdessen wird von den Methoden lediglich ein Puffer der richtigen Länge bereitgestellt. Der Größenparameter ist optional, wenn eine ID mit festgelegter Länge angefordert wird (NULL kann angegeben werden). Wenn die Größe übergeben wird, agieren die Methoden wie im Fall variabler Längen. Wenn daher die Länge kleiner ist als die ID, die zurückgegebenen werden soll, wird ein Fehlercode mit der Meldung zurückgegeben, dass weitere Daten verfügbar sind, und in der Größenvariable wird die benötigte Größe gespeichert. Wenn die Länge größer ist als erforderlich, wird die Methode erfolgreich ausgeführt, und die benötigte Größe wird zurückgegeben.

Bereiche

Blöcke geordneter IDs werden als Bereich bezeichnet. Ein Bereich verwendet die untere und obere ID als geschlossene Grenzen.

Verwalteter Code Die Bereichsgrenzen werden direkt an Methoden übergeben, die mit Bereichen arbeiten.

Nicht verwalteter Code Ein Bereich wird mit der SYNC_RANGE-Struktur dargestellt.

Siehe auch

Verweis

ID_PARAMETERS-Struktur
ID_PARAMETER_PAIR-Struktur
SYNC_ID-Struktur
SYNC_RANGE-Struktur
SyncIdFormatGroup
SyncIdFormat
SyncId

Konzepte

Metadatenverwaltung
Metadatenanforderungen