Поделиться через


Основные сведения о наборе знаний синхронизации

В этом разделе кратко представлено, как в алгоритмах синхронизации Sync Framework используется набор знаний для перечисления изменений и обнаружения конфликтов. Набор знаний — это метаданные, которые описывают все изменения, примененные к реплике, как непосредственно, так и в ходе синхронизации. Перечисление изменений — это процесс определения элементов, измененных в реплике источника, о которых неизвестно в реплике назначения. Обнаружение конфликтов — это процесс определения операций, которые были выполнены в одной реплике без передачи сведений об изменении в другую реплику, например, когда в двух репликах локально обновляется один и тот же элемент.

NoteПримечание.

Обычно службы и приложения синхронизации не используют набор знаний непосредственно. Вместо этого вызываются методы Sync Framework, от имени которых запускаются операции с набором знаний.

Операции с набором знаний

В следующей таблице перечислены и описаны операции с набором знаний синхронизации.

Оператор Описание

Contains

Определяет, содержится ли заданный объект набора знаний в заданной версии элемента. (Версия состоит из ключа реплики и счетчика тактов.) Иными словами, эта операция определяет, применялось ли это изменение репликой, которой принадлежит данный набор знаний. В качестве входных данных для этой операции необходимы идентификатор и версия элемента.

Эта операция используется для перечисления изменений и обнаружения конфликтов.

Union

Создает из двух объектов набора знаний новый объект набора знаний, который содержит в точности такие же изменения, которые входят по крайней мере в один из исходных объектов.

Эта операция используется в ходе применения изменений.

Project

Используя заданный объект набора знаний и идентификатор элемента, идентификатор базовой единицы или диапазон идентификаторов элементов, создает новый объект набора знаний, который содержит те же изменения, что исходный объект, для заданного идентификатора или диапазона идентификатора и который не содержит изменений для остальных элементов.

Эта операция используется, когда необходимо ограничить набор знаний определенным элементом, базовой единицей или диапазоном элементов, например: в ходе прерванной синхронизации, при разбиении на пакеты и в некоторых расширенных видах фильтруемой синхронизации.

Exclude

Используя заданный объект набора знаний и идентификатор элемента или идентификатор базовой единицы, создает новый объект набора знаний, который не содержит данных для указанного идентификатора, а для остальных элементов содержит те же изменения, что и исходный объект. Эта операция противоположна операции project: операция exclude проецирует набор знаний на все элементы, кроме заданного.

Эта операция обычно используется, когда возникают сбои с применением изменений.

Перечисление изменений

Перечисление изменений реализуется разработчиком поставщика источника. Перечисление изменений использует заданные операции с набором знаний и работает следующим образом.

  1. Поставщик назначения отправляет текущий набор знаний реплики назначения в поставщик источника.

  2. Поставщик источника проходит по всем элементам в реплике источника и выполняет для каждого элемента следующие действия:

    1. определяет, содержит ли набор знаний назначения версию элемента, которая хранится в реплике источника;

    2. если версия отсутствует в наборе знаний, поставщик источника включает элемент в пакет изменений для отправки в поставщик назначения.

NoteПримечание.

Перечисление изменений также может выполняться путем прямого запроса к хранилищу элементов или сочетанием запроса и данного алгоритма, если хранилище элементов поддерживает запросы.

Отправка изменений

После перечисления изменения необходимо отправить из поставщика источника в поставщик назначения. Для этого изменения разделяются на пакеты, и для каждого пакета отправляются следующие сведения.

  • Метаданные, описывающие изменения. Поставщик добавляет в пакет метаданные для каждого изменения, содержащегося в пакете.

  • Определяющий набор знаний, которым обычно является текущий набор знаний реплики источника, для использования в обнаружении конфликтов. Определяющий набор знаний отвечает на вопрос: что было известно в момент применения этих изменений? Поставщик добавляет в пакет определяющий набор знаний для каждой группы изменений, добавляемых в пакет.

  • Набор известных знаний. Это текущий набор знаний реплики источника, спроецированный на подмножество элементов, которые отправляются в этом пакете, в котором также записаны конфликты. Набор известных знаний отвечает на вопрос: что станет известным в результате применения этих изменений? Платформы Sync Framework вычисляют набор известных знаний за поставщика.

NoteПримечание.

Разбиение на пакеты и перечисление изменений может обрабатываться параллельно, поскольку для разбиения на пакеты не нужно дожидаться завершения перечисления.

Упорядочение

В зависимости от порядка, в котором отправляются изменения, проецирование набора знаний на элементы в пакете может занять некоторое время. Например, набор знаний поддерживает диапазоны идентификаторов элементов. Поэтому, если изменения отправляются в том порядке идентификаторов элементов, в котором они применяются, проецирование набора знаний будет очень эффективным.

Независимо от порядка, оператор project всегда может проецировать набор знаний в отправляемый пакет.

Ошибки

Если поставщику источника не удается отправить перечисленный элемент, этот элемент необходимо исключить из отправленного набора известных знаний. Для этого используется оператор exclude.

Обнаружение конфликтов

Обнаружение конфликтов выполняется компонентами платформы Sync Framework, такими как NotifyingChangeApplier (для управляемого кода) или ISynchronousNotifyingChangeApplier (для неуправляемого кода).

После того как поставщик назначения получил пакет изменений, в котором содержатся набор известных знаний и определяющий набор знаний для пакета, необходимо для каждого изменения в пакете определить, выполняются ли следующие условия.

  • Находится ли это изменение в конфликте с текущей версией элемента, хранимой в реплике назначения?

  • Является ли это изменение устаревшим (заменено текущей версией элемента, хранимой в реплике назначения)?

Ответ на эти вопросы получается по следующим простым правилам.

  • Изменение конфликтует с текущей версией, если версия элемента, хранящаяся в реплике назначения, не содержится в наборе знаний реплики источника.

  • Изменение является устаревшим, если его версия содержится в наборе знаний реплики назначения.

    NoteПримечание.

    Обычно устаревшие изменения не отправляются. Однако в случае конфликта такие изменения могут отправляться. Тогда платформа Sync Framework должна выявить их наличие и обработать их.

Применение изменений

После получения изменений и обнаружения конфликтов можно применить изменения в реплике назначения. На этом шаге поставщик назначения выполняет следующие действия.

  1. Корректирует набор известных знаний пакет изменений для локально происходящих событий.

    1. Если было применено только подмножество изменений из-за прерывания или отмены операций, поставщик устанавливает в каждом непримененном изменении устранимую ошибку. Платформа Sync Framework использует оператор project, чтобы ограничить набор известных знаний только этим подмножеством.

    2. Если применение некоторых изменений завершилось ошибкой из-за проблем с управлением цифровыми правами, например из-за заблокированных объектов, поставщик назначения устанавливает в каждом непримененном изменении устранимую ошибку. Платформа Sync Framework использует операцию exclude, чтобы удалить неудачно завершившиеся изменения из набора известных знаний.

    3. Если были обнаружены конфликты, которые не удалось разрешить, платформа Sync Framework также удаляет их с помощью операции exclude.

  2. Заменяет набор знаний реплики назначения обновленным набором знаний назначения, вычисленным платформой Sync Framework.

См. также

Основные положения

Управление метаданными для стандартных поставщиков
Перечисление изменений
Обработка конфликтов
Применение изменений