Share via


메타데이터 저장 시작

Metadata Storage Service를 통해 복제본을 나타내며 다른 방법으로 메타데이터를 저장할 수 없는 공급자의 동기화 메타데이터를 저장할 수 있습니다. Metadata Storage Service에서는 메모리와 디스크 공간을 약간 차지하는 신뢰할 수 있는 소형 데이터베이스를 사용하며, 이러한 데이터베이스를 공급자와 함께 재배포할 수 있습니다.

Metadata Storage Service API에서는 메타데이터 저장소에 액세스하는 데 사용되는 인터페이스 및 메서드와 메타데이터 저장소를 명확히 분리하므로 공급자를 거의 변경하지 않고도 대체 저장소를 구현하여 사용할 수 있습니다.

참고

Metadata Storage Service 인터페이스는 단일 스레드이며 모든 스레드에 대해 호출할 수 있습니다. 그러나 다중 스레드 응용 프로그램에서는 이러한 인터페이스를 사용할 때 적절한 스레드 동기화를 제공해야 합니다.

메타데이터 저장소 만들기

Metadata Storage Service에서는 소형 데이터베이스를 사용하여 메타데이터를 파일에 저장하는 API의 구현을 제공합니다.

관리 코드 메타데이터 저장소는 SqlMetadataStore 개체로 나타냅니다. 이 개체는 MetadataStore 추상 클래스를 확장합니다. SqlMetadataStore는 복제본 메타데이터 및 트랜잭션을 처리하는 기본 클래스 메서드를 제공할 뿐 아니라 메타데이터 저장소 자체를 만들거나 여는 메서드도 제공합니다. 새 저장소를 만들려면 CreateStore를 호출합니다. 기존 저장소를 열려면 OpenStore를 호출합니다.

비관리 코드 메타데이터 저장소는 ISqlSyncMetadataStore 인터페이스 개체로 나타냅니다. 이 개체는 ISyncMetadataStore 인터페이스를 확장합니다. ISqlSyncMetadataStore는 복제본 메타데이터 및 트랜잭션을 처리하는 기본 인터페이스 메서드를 제공할 뿐 아니라 메타데이터 저장소 자체를 만들거나 여는 메서드도 제공합니다. ISqlSyncMetadataStore 개체를 만들려면 CLSID_SyncMetadataStoreIID_ISqlSyncMetadataStoreCoCreateInstance에 전달합니다. 새 저장소를 만들려면 ISqlSyncMetadataStore::CreateStore를 호출합니다. 기존 저장소를 열려면 ISqlSyncMetadataStore::OpenStore를 호출합니다.

Security note보안 참고

메타데이터 파일은 무단 액세스에 대해 안전하게 보호되지 않습니다. 메타데이터 파일을 보호하려면 이 파일이 들어 있는 폴더를 적절히 보호해야 합니다. 예를 들어 DACL(임의 액세스 제어 목록)을 사용할 수 있습니다. 메타데이터 파일이 원격 위치에 저장된 경우 Metadata Storage Service와 원격 폴더 간의 통신 채널을 적절하게 보호해야 합니다.

복제본 메타데이터

복제본 메타데이터를 사용하려면 먼저 초기화해야 합니다. 복제본 메타데이터는 각 메타데이터 저장소마다 한 번만 초기화할 수 있습니다. 필요한 사용자 지정 필드 또는 인덱스는 복제본 메타데이터를 초기화할 때 정의해야 합니다.

관리 코드 InitializeReplicaMetadata를 호출하여 복제본 메타데이터를 초기화합니다.

비관리 코드 ISyncMetadataStore::InitializeReplicaMetadata를 호출하여 복제본 메타데이터를 초기화합니다.

기존 저장소의 복제본 메타데이터에 액세스하려면 복제본 메타데이터 개체를 가져와야 합니다. 각 복제본 ID에 대해 서로 다른 복제본 메타데이터 개체가 존재합니다. 그러나 Metadata Storage Service에서는 각 복제본 ID에 대해 복제본 메타데이터 개체가 한 번에 하나만 존재할 수 있으므로 메타데이터 저장소에 대한 동시 업데이트가 발생하지 않습니다. 지정된 복제본 ID에 대해 복제본 메타데이터 개체의 인스턴스가 이미 있으면 해당 개체를 열려는 프로세스에서 기존 개체에 대한 참조가 반환됩니다. 지정된 복제본 ID에 대해 복제본 메타데이터 개체의 인스턴스가 이미 있으면 해당 개체를 열려는 프로세스가 아닌 다른 프로세스에서는 작업이 실패합니다.

관리 코드 GetReplicaMetadata를 호출하여 복제본 메타데이터 개체를 가져옵니다.

비관리 코드 ISyncMetadataStore::GetReplicaMetadata를 호출하여 복제본 메타데이터 개체를 가져옵니다.

복제본 메타데이터 개체는 복제본의 메타데이터 및 복제본에 들어 있는 항목의 메타데이터에 액세스하는 메서드를 제공합니다. 자세한 내용은 복제본 메타데이터에 액세스를 참조하십시오.

사용자 지정 항목 필드

항목 메타데이터에 대한 사용자 지정 필드 집합을 정의할 수 있습니다. 각 필드는 고유 문자열 이름 및 값으로 구성되어 있습니다. 이러한 필드를 사용하여 기본 항목 메타데이터 집합에서 지원하지 않는 항목에 대한 추가 메타데이터를 저장할 수 있습니다. ItemMetadata(관리 코드의 경우) 또는 IItemMetadata(비관리 코드의 경우)의 다양한 메서드를 통해 이러한 필드에 액세스할 수 있습니다. 이러한 필드 및 해당 형식(예: 크기 및 데이터 형식)은 복제본 메타데이터가 초기화될 때 정의됩니다.

관리 코드 FieldSchema 개체를 InitializeReplicaMetadata에 전달하여 사용자 지정 필드를 지정합니다.

비관리 코드 CUSTOM_FIELD_DEFINITION 개체의 배열을 ISyncMetadataStore::InitializeReplicaMetadata에 전달하여 사용자 지정 필드를 지정합니다.

인덱스 스키마

사용자 지정 필드 집합을 인덱스로 사용하여 메타데이터 저장소의 항목을 효율적으로 찾을 수 있도록 인덱스 스키마 집합을 정의할 수 있습니다. 인덱스 스키마를 고유한 것으로 정의하여 해당 인덱스가 단일 항목을 정의하도록 할 수 있습니다. 인덱스 스키마에 포함된 각 필드는 복제본에 대해 정의된 사용자 지정 필드 스키마에도 있어야 합니다.

관리 코드 IndexSchema 개체를 InitializeReplicaMetadata에 전달하여 인덱스 스키마를 지정합니다.

비관리 코드 CUSTOM_FIELDS_INDEX 개체의 배열을 ISyncMetadataStore::InitializeReplicaMetadata에 전달하여 인덱스 스키마를 지정합니다.

트랜잭션

트랜잭션은 암시적이거나 명시적일 수 있습니다. 암시적 트랜잭션은 메타데이터 저장소에서 데이터를 읽을 때만 지원됩니다. 먼저 명시적 트랜잭션을 시작하지 않고 메타데이터 저장소에 쓰려고 하면 ExplicitTransactionRequiredException(관리 코드의 경우)이 throw되거나 SYNC_E_METADATA_ACTIVE_TRANSACTION_REQUIRED(비관리 코드의 경우)가 반환됩니다.

관리 코드를 사용하여 메타데이터를 설정하려면

  1. BeginTransaction을 호출하여 명시적 트랜잭션을 시작합니다. CommitTransaction을 호출하여 트랜잭션 도중 변경된 내용을 커밋합니다. RollbackTransaction을 호출하여 트랜잭션 도중 변경된 내용을 취소합니다.

  2. ReplicaMetadata 또는 ItemMetadata 개체의 속성을 설정합니다.

  3. SaveReplicaMetadata 또는 SaveItemMetadata를 사용하여 속성을 저장합니다.

비관리 코드를 사용하여 메타데이터를 설정하려면

  1. ISyncMetadataStore::BeginTransaction을 호출하여 명시적 트랜잭션을 시작합니다. ISyncMetadataStore::CommitTransaction을 호출하여 트랜잭션 도중 변경된 내용을 커밋합니다. ISyncMetadataStore::RollbackTransaction을 호출하여 트랜잭션 도중 변경된 내용을 취소합니다.

  2. IReplicaMetadata 또는 IItemMetadata 개체의 속성을 설정합니다.

  3. IReplicaMetadata::SaveReplicaMetadata 또는 IReplicaMetadata::SaveItemMetadata를 사용하여 속성을 저장합니다.

참고

이 트랜잭션 서비스는 메타데이터 저장소에 저장된 메타데이터에만 적용됩니다. 복제본의 항목 저장소에 저장된 항목 데이터는 이 트랜잭션에 포함되지 않습니다.

참고 항목

참조

ISqlSyncMetadataStore 인터페이스
CUSTOM_FIELD_DEFINITION 구조
IReplicaMetadata 인터페이스
IItemMetadata 인터페이스
CUSTOM_FIELDS_INDEX 구조
SqlMetadataStore
FieldSchema
ReplicaMetadata
ItemMetadata
IndexSchema

기타 리소스

Sync Framework Metadata Storage Service