Автономная синхронизация данных

Автономная синхронизация данных — это функция пакета SDK для мобильных приложений Azure. Данные хранятся в локальном хранилище. Если приложение находится в автономном режиме, вы по-прежнему можете создавать, изменять и искать данные. Данные синхронизируются с вашей службой мобильных приложений Azure, когда устройство подключено к Интернету. Пакет SDK поддерживает разрешение конфликтов, когда одна и та же запись изменяется в клиенте и в службе.

Автономная синхронизация имеет несколько преимуществ.

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

В следующих учебниках показано, как добавить автономную синхронизацию в мобильные клиенты с помощью мобильных приложений Azure:

Что такое таблица синхронизации?

Пакеты SDK для мобильных приложений Azure предоставляют объект IMobileServiceTable, который напрямую обращается к службе. Если устройство не подключено к сети, операция завершится с ошибкой. Таблица синхронизации предоставляет те же операции для локальной базы данных. Локальное хранилище можно синхронизировать со службой позже. Перед выполнением операций с таблицами необходимо инициализировать локальное хранилище.

Что такое локальное хранилище?

Локальное хранилище — это уровень сохраняемости данных на клиентском устройстве. Большинство платформ используют SQLite для локального хранилища, но iOS использует Core Data. Для Windows требуется подключаемый модуль. Дополнительные сведения см. в разделе Windows (UWP): включение автономной синхронизации.

Кроме того, можно реализовать собственное локальное хранилище. Например, используйте версию SQLite с SQLCipher для создания зашифрованного хранилища.

Что такое контекст синхронизации?

Контекст синхронизации связан с MobileServiceClient, чтобы отслеживать изменения данных в таблицах синхронизации. Контекст синхронизации поддерживает очередь операций. Очередь операций — это упорядоченный список ожидающих изменений, которые еще не были отправлены на сервер. Локальное хранилище связано с контекстом синхронизации посредством метода инициализации, например IMobileServicesSyncContext.InitializeAsync(localstore) , в пакете SDK для клиента .NET.

Как работает автономная синхронизация

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

Синхронизация

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

Неявная отправка

Если для таблицы с ожидающими локальными обновлениями выполняется извлечение, то сначала будет выполнена операция отправки в контексте синхронизации. Это позволяет свести к минимуму конфликты между изменениями, которые уже поставлены в очередь, и новыми данными с сервера.

Добавочная синхронизация

Первым параметром операции отправки является имя запроса. При использовании имени запроса, отличного от NULL, пакет SDK для мобильных приложений Azure выполняет добавочную синхронизацию. При запуске каждой операции извлечения сохраняется последняя метка времени updatedAt для этого набора результатов. Последующие операции извлечения будут получать только записи после этой метки времени. Чтобы использовать добавочную синхронизацию, сервер должен возвращать осмысленные значения updatedAt. Имя запроса должно быть уникальным для каждого логического запроса в вашем приложении.

Если в запросе есть параметр, один из способов создать уникальное имя запроса — включить в него значение параметра. Например, при фильтрации по userId имя запроса может быть следующим (в C#):

await todoTable.PullAsync("todoItems" + userid, syncTable.Where(u => u.UserId == userId));

Если вы хотите явно отказаться от добавочной синхронизации, передайте null в качестве идентификатора запроса. Каждая операция извлечения будет получать все записи.

Очистка

Вы можете очистить локальное хранилище с помощью IMobileServiceSyncTable.PurgeAsync. Это может потребоваться, если в базе данных клиента есть устаревшие данные или вы хотите отменить все ожидающие изменения.

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