유연한 ID
유연한 ID는 복제본, 항목 또는 변경 단위를 식별하는 데 사용됩니다. Sync Framework에서는 다음과 같은 형식의 유연한 ID를 지원합니다.
고정 길이 ID
고정 길이 ID는 항상 일정한 길이로 사용됩니다. 길이는 ID 형식 스키마에 지정됩니다.
가변 길이 ID
가변 길이 ID는 일정하지 않은 길이로 사용될 수 있습니다. 최대 길이는 ID 형식 스키마에 지정됩니다.
관리 코드 ID를 SyncId 클래스로 나타냅니다. 이 클래스에는 ID 및 ID가 가변 길이인지 여부를 나타내는 값이 들어 있습니다.
비관리 코드 ID를 바이트 배열로 나타냅니다. 가변 길이 ID는 SYNC_ID 구조체로 나타냅니다. 이 구조체에는 ID의 길이와 바이트 배열로 나타낸 ID가 들어 있습니다.
ID 스키마
ID 형식은 시스템의 각 ID에 대한 다음과 같은 정보를 지정하는 스키마에 정의되어 있습니다.
ID가 고정 길이인지 또는 가변 길이인지 여부
ID가 고정 길이인 경우의 크기 또는 ID가 가변 길이인 경우의 최대 크기
관리 코드 SyncIdFormatGroup 클래스를 사용하여 ID 형식 스키마를 지정합니다.
비관리 코드 ID_PARAMETERS 구조체를 사용하여 ID 형식 스키마를 지정합니다.
다양한 Sync Framework 메서드에 이 스키마를 제공해야 하며, 모든 개체는 이 스키마를 통해 동일한 ID 스키마 정보를 사용합니다.
동기화 세션에서는 두 공급자에 해당 스키마를 쿼리합니다. 그런 다음 스키마를 서로 비교하여 두 공급자가 같은 스키마를 사용하는지 확인합니다. 확인에 실패하면 세션이 만들어지지 않습니다.
관리 코드 세션에서 IdFormats 속성을 사용하여 공급자의 스키마를 가져옵니다.
비관리 코드 세션에서 ISyncProvider::GetIdParameters 메서드를 사용하여 공급자의 스키마를 가져옵니다.
참고
Sync Framework 메서드에 전달된 ID의 형식이 ID 형식 스키마에 지정된 형식과 일치해야 하며, 그렇지 않으면 메서드가 실패합니다.
권장되는 전역 ID 형식
동기화 범위에 있는 각 항목에는 동기화 커뮤니티 전체에서 고유한 전역 ID가 있어야 합니다. 전역 ID는 유연한 ID이므로 모든 형식을 사용할 수 있습니다. 그러나 메타데이터는 단일 범위로 정렬된 ID 그룹을 나타낼 수 있으므로 ID를 정렬된 그룹으로 열거하면 메타데이터가 간결해집니다. 또한 범위를 사용하면 메타데이터를 보다 효율적으로 유지 관리할 수 있습니다. 따라서 ID를 열거하기 편리한 논리적인 순서로 정렬하는 것이 좋습니다. 전역 ID의 형식으로는 관리되는 SyncGlobalId 클래스 또는 관리되지 않는 SYNC_GID 구조체와 같이 8바이트 접두사가 있는 16바이트 GUID를 사용하는 것이 좋습니다.
계층적 데이터에 대한 특수 고려 사항
동기화 중인 항목에 계층 구조가 있는 경우 ID 접두사에 클록 시간과 같이 일정하게 증가하는 숫자를 포함하면 유용할 수 있습니다. 일반적으로 부모가 자식보다 먼저 생성되므로 부모는 열거 순서에서 일찍 나타납니다. 따라서 공급자는 항목이 잘못된 순서로 적용되는 경우를 최소화할 수 있습니다.
계층적 데이터에 대한 전역 ID를 할당하는 방법 중 하나는 다음과 같습니다.
복제본의 모든 고유 항목을 인덱싱할 수 있는 규모의 카운터를 만듭니다.
범위의 루트에서 시작하여 너비보다 깊이를 우선하면서 시스템을 순회합니다.
각 항목(부모 또는 자식)에 대해 GUID를 생성합니다.
GUID 앞에 실제 시계 시간을 추가합니다.
해당 컨테이너 또는 중첩된 개별 항목에 관계없이 이 방법을 사용하여 새로 작성된 항목에 전역 ID를 할당할 수 있습니다.
비관리 코드의 메모리 처리
ID는 바이트 배열을 가리키는 포인터로 나타냅니다. 따라서 고정 길이 ID의 경우에는 사용 중인 ID를 바이트 포인터로 캐스팅하기만 하면 됩니다. 가변 길이 ID의 경우에는 SYNC_ID 구조체와 같이 ID 데이터 앞에 버퍼 크기를 추가해야 합니다.
참고
Sync Framework에서는 호출자가 할당한 ID에 대한 참조를 유지하지 않습니다. Sync Framework에서 ID를 유지해야 하는 경우에는 ID에 사용할 자체 메모리를 할당하여 ID를 내부적으로 복사합니다. ID와 관련된 메모리를 할당하고 해제하는 작업은 호출자가 담당해야 합니다.
비관리 코드에서 ID를 반환 값으로 사용
가변 길이 ID를 반환할 때는 Sync Framework 메서드를 두 번 호출해야 합니다.
메서드를 호출하여 ID의 크기를 확인합니다.
호출자는 메모리를 할당하고 함수를 다시 호출합니다. 이번에는 새로 할당된 버퍼와 해당 크기를 제공합니다.
사용자는 올바른 크기의 버퍼를 할당하거나 최대 크기의 버퍼를 할당하여 이 과정을 최적화할 수 있습니다. 이러한 경우에는 첫 번째 호출이 불필요하지만 호출자는 항상 반환된 HRESULT를 검사하여 버퍼가 올바른 크기인지 확인해야 합니다.
고정 길이 ID를 반환하는 메서드에는 2단계 과정이 사용되지 않습니다. 대신 메서드에서 단순히 올바른 길이의 버퍼를 제공합니다. 고정 길이 ID를 요청할 때는 크기 매개 변수를 생략하고 NULL을 제공할 수 있습니다. 크기가 전달된 경우 메서드의 동작은 가변 길이 ID의 경우와 같습니다. 즉, 크기가 반환될 ID보다 작으면 더 많은 데이터가 제공된다는 오류 코드가 반환되고 크기 변수에 필요한 크기가 저장됩니다. 크기가 필요한 크기보다 크면 메서드가 성공하고 필요한 크기가 반환됩니다.
범위
정렬된 ID 블록을 범위라고 합니다. 범위에는 하한 ID와 상한 ID가 있으며 경계도 범위에 포함됩니다.
관리 코드 범위를 사용하는 메서드에 범위 경계를 직접 전달합니다.
비관리 코드 SYNC_RANGE 구조체를 사용하여 범위를 나타냅니다.
참고 항목
참조
ID_PARAMETERS 구조
ID_PARAMETER_PAIR 구조
SYNC_ID 구조
SYNC_RANGE 구조
SyncIdFormatGroup
SyncIdFormat
SyncId