Synchronizowanie danych w trybie offline w usłudze Azure Mobile AppsOffline Data Sync in Azure Mobile Apps

Co to jest synchronizacja danych offline?What is offline data sync?

Synchronizacja danych offline jest klientem a serwerem funkcji zestawu SDK usługi Azure Mobile Apps, która ułatwia deweloperom tworzenie aplikacji, które będą funkcjonalne bez połączenia sieciowego.Offline data sync is a client and server SDK feature of Azure Mobile Apps that makes it easy for developers to create apps that are functional without a network connection.

Gdy Twoja aplikacja jest w trybie offline, można nadal tworzyć i modyfikować dane, które są zapisywane w magazynie lokalnym.When your app is in offline mode, you can still create and modify data, which are saved to a local store. Gdy aplikacja jest wróci do trybu online, może synchronizować zmiany lokalne, z zapleczem aplikacji mobilnej platformy Azure.When the app is back online, it can synchronize local changes with your Azure Mobile App backend. Funkcja obejmuje również obsługę wykrywania konfliktów, gdy ten sam rekord zostanie zmieniony zarówno klient, jak i wewnętrznej bazy danych.The feature also includes support for detecting conflicts when the same record is changed on both the client and the backend. Następnie można obsłużyć konflikty na serwerze lub kliencie.Conflicts can then be handled either on the server or the client.

Synchronizacja offline ma kilka zalet:Offline sync has several benefits:

  • Skróć czas reakcji aplikacji, buforując dane serwera lokalnie na urządzeniuImprove app responsiveness by caching server data locally on the device
  • Twórz odporne aplikacje, które będą pozostawały użyteczne, gdy istnieją problemy z sieciąCreate robust apps that remain useful when there are network issues
  • Zezwolić użytkownikom końcowym tworzyć i modyfikować dane nawet wtedy, gdy jest Brak dostępu do sieci, obsługi scenariuszy niewielkiego lub żadnego połączeniaAllow end users to create and modify data even when there is no network access, supporting scenarios with little or no connectivity
  • Synchronizowanie danych na wielu urządzeniach i wykrywania konfliktów, gdy ten sam rekord zostanie zmodyfikowany za pomocą dwóch urządzeńSync data across multiple devices and detect conflicts when the same record is modified by two devices
  • Ograniczenie użycia sieci w dużym opóźnieniem lub mierzonych sieciachLimit network use on high-latency or metered networks

Następujące samouczki pokazują, jak dodawanie synchronizacji offline dla klientów mobilnych za pomocą usługi Azure Mobile Apps:The following tutorials show how to add offline sync to your mobile clients using Azure Mobile Apps:

Co to jest tabela synchronizacji?What is a sync table?

Aby uzyskać dostęp do endpoint "/ tabele", zestawów SDK klienta usługi Azure Mobile obejmują interfejsy takich jak IMobileServiceTable (zestaw SDK klienta platformy .NET) lub MSTable (klient z systemem iOS).To access the "/tables" endpoint, the Azure Mobile client SDKs provide interfaces such as IMobileServiceTable (.NET client SDK) or MSTable (iOS client). Te interfejsy API połączyć się bezpośrednio z zaplecza aplikacji mobilnej platformy Azure i zakończyć się niepowodzeniem, jeśli urządzenie klienckie nie ma połączenia sieciowego.These APIs connect directly to the Azure Mobile App backend and fail if the client device does not have a network connection.

Aby zapewnić obsługę pracy w trybie offline, zamiast tego należy używać aplikacji zsynchronizuj spis interfejsów API, takich jak IMobileServiceSyncTable (zestaw SDK klienta platformy .NET) lub MSSyncTable (klient z systemem iOS).To support offline use, your app should instead use the sync table APIs, such as IMobileServiceSyncTable (.NET client SDK) or MSSyncTable (iOS client). Wszystkie te same operacje CRUD (tworzenia, odczytu, Update, Delete) działają na synchronizacji tabeli interfejsów API, z wyjątkiem teraz mogą odczytywać lub zapisać magazynu lokalnego.All the same CRUD operations (Create, Read, Update, Delete) work against sync table APIs, except now they read from or write to a local store. Przed wykonaniem żadnych operacji tabeli synchronizacji magazynu lokalnego musi zostać zainicjowany.Before any sync table operations can be performed, the local store must be initialized.

Co to jest Magazyn lokalny?What is a local store?

Magazyn lokalny jest warstwę trwałości danych na urządzeniu klienckim.A local store is the data persistence layer on the client device. Zestawy SDK klienta usługi Azure Mobile Apps udostępnia domyślną implementację magazynu lokalnego.The Azure Mobile Apps client SDKs provide a default local store implementation. Windows, Xamarin i systemu Android opiera się na bazy danych SQLite.On Windows, Xamarin and Android, it is based on SQLite. W systemach iOS jest on oparty na danych podstawowych.On iOS, it is based on Core Data.

Aby użyć implementacji oparty na programie SQLite na Windows Phone lub Microsoft Store, musisz zainstalować rozszerzenie bazy danych SQLite.To use the SQLite-based implementation on Windows Phone or Microsoft Store, you need to install a SQLite extension. Aby uzyskać więcej informacji, zobacz Platforma Universal Windows: Włączanie synchronizacji offline. Systemy android i iOS są dostarczane z wersję bazy danych SQLite w system operacyjny urządzenia, więc nie można odwoływać się do własnej wersji bazy danych SQLite.For more information, see Universal Windows Platform: Enable offline sync. Android and iOS ship with a version of SQLite in the device operating system itself, so it is not necessary to reference your own version of SQLite.

Deweloperzy mogą także implementować własne magazynu lokalnego.Developers can also implement their own local store. Na przykład jeśli chcesz przechowywać dane w postaci zaszyfrowanej na kliencie mobilnym, można zdefiniować lokalny magazyn, który używa SQLCipher na potrzeby szyfrowania.For instance, if you wish to store data in an encrypted format on the mobile client, you can define a local store that uses SQLCipher for encryption.

Czym jest kontekst synchronizacji?What is a sync context?

A kontekst synchronizacji jest skojarzony z obiektem klientów urządzeń przenośnych (takie jak IMobileServiceClient lub MSClient) i śledzi zmiany wprowadzone z tabelami synchronizacji.A sync context is associated with a mobile client object (such as IMobileServiceClient or MSClient) and tracks changes that are made with sync tables. Utrzymuje kontekst synchronizacji kolejki operacji, który przechowuje listy uporządkowanej operacje CUD (Tworzenie, Update, Delete), później są wysyłane do serwera.The sync context maintains an operation queue, which keeps an ordered list of CUD operations (Create, Update, Delete) that is later sent to the server.

Magazyn lokalny jest skojarzony z kontekstem synchronizacji, takie jak za pomocą metody inicjowania IMobileServicesSyncContext.InitializeAsync(localstore) w Zestaw SDK klienta platformy .NET.A local store is associated with the sync context using an initialize method such as IMobileServicesSyncContext.InitializeAsync(localstore) in the .NET client SDK.

Jak w trybie offline działa synchronizacjaHow offline synchronization works

Korzystając z tabel synchronizacji, kod klienta określa, kiedy lokalne zmiany są synchronizowane z zapleczem aplikacji mobilnej platformy Azure.When using sync tables, your client code controls when local changes are synchronized with an Azure Mobile App backend. Nic nie są wysyłane do wewnętrznej bazy danych do momentu wywołania wypychania zmian lokalnych.Nothing is sent to the backend until there is a call to push local changes. Podobnie, magazynu lokalnego jest wypełniana przy użyciu nowych danych, tylko wtedy, gdy wywołanie ściągnięcia danych.Similarly, the local store is populated with new data only when there is a call to pull data.

  • Wypychanie: Wypychania jest operacją w kontekście synchronizacji i wysyła wszystkie zmiany CUD od czasu ostatniej replikacji wypychanej.Push: Push is an operation on the sync context and sends all CUD changes since the last push. Należy pamiętać, że nie jest możliwe do wysyłania tylko pojedyncza tabela zmian, ponieważ w przeciwnym razie operacje mogą być wysyłane poza kolejnością.Note that it is not possible to send only an individual table's changes, because otherwise operations could be sent out of order. Wypychane wykonuje szereg wywołania REST do zaplecza aplikacji mobilnej platformy Azure, która z kolei zmienia serwera bazy danych.Push executes a series of REST calls to your Azure Mobile App backend, which in turn modifies your server database.

  • Ściągnij: Ściągnięcia odbywa się na konkretnych tabel i można dostosować, używając zapytanie, aby pobrać tylko podzestaw danych serwera.Pull: Pull is performed on a per-table basis and can be customized with a query to retrieve only a subset of the server data. Zestawy SDK klienta usługi Azure Mobile wstawić dane wynikowe do magazynu lokalnego.The Azure Mobile client SDKs then insert the resulting data into the local store.

  • Niejawne Wypchnięć: Jeśli ściągnięcia jest wykonywane względem tabeli, która ma oczekujące aktualizacje lokalnych, ściągnięcia najpierw wykonuje push() kontekstu synchronizacji.Implicit Pushes: If a pull is executed against a table that has pending local updates, the pull first executes a push() on the sync context. To zamówienie minimalizuje konflikty między zmiany, które już są umieszczane w kolejce, a nowych danych z serwera.This push helps minimize conflicts between changes that are already queued and new data from the server.

  • Synchronizacja przyrostowa: pierwszy parametr do operacji ściągania jest nazwa_zapytania używany tylko na komputerze klienckim.Incremental Sync: the first parameter to the pull operation is a query name that is used only on the client. Jeśli używasz nazwę kwerendy innych niż null, zestaw SDK usług Azure Mobile wykonuje synchronizacja przyrostowa. Każdorazowo operacji ściągania zwraca zestaw wyników, najnowsze updatedAt sygnaturę czasową od tego zestawu wyników są przechowywane w tabelach systemu lokalnego zestawu SDK.If you use a non-null query name, the Azure Mobile SDK performs an incremental sync. Each time a pull operation returns a set of results, the latest updatedAt timestamp from that result set is stored in the SDK local system tables. Operacji ściągania kolejnych pobierać tylko rekordy po tej sygnaturze czasowej.Subsequent pull operations retrieve only records after that timestamp.

    Korzystać z synchronizacji przyrostowej, serwer musi zwracać istotnych updatedAt wartości, a także musi obsługiwać sortowania według tego pola.To use incremental sync, your server must return meaningful updatedAt values and must also support sorting by this field. Jednak ponieważ zestaw SDK dodaje swoje własne sortowania według pola updatedAt, nie można użyć zapytań ściągania, który ma swój własny orderBy klauzuli.However, since the SDK adds its own sort on the updatedAt field, you cannot use a pull query that has its own orderBy clause.

    Nazwa zapytania może być dowolny ciąg, który wybierzesz, ale muszą być unikatowe dla każdego zapytania logiczne w aplikacji.The query name can be any string you choose, but it must be unique for each logical query in your app. W przeciwnym razie ściągnięcia innej operacji może spowodować zastąpienie tą samą sygnaturą czasową synchronizacja przyrostowa i zapytań może zwracać nieprawidłowe wyniki.Otherwise, different pull operations could overwrite the same incremental sync timestamp and your queries can return incorrect results.

    Jeśli zapytanie zawiera parametr, jeden ze sposobów tworzenia unikatowych nazwa_zapytania jest wartość parametru.If the query has a parameter, one way to create a unique query name is to incorporate the parameter value. Na przykład w przypadku filtrowania na identyfikator użytkownika, nazwę kwerendy może być w następujący sposób (w języku C#):For instance, if you are filtering on userid, your query name could be as follows (in C#):

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

    Jeśli chcesz zrezygnować z synchronizacja przyrostowa, przekazać null jako identyfikator zapytania.If you want to opt out of incremental sync, pass null as the query ID. W tym przypadku pobierane są wszystkie rekordy na każde wywołanie PullAsync, który jest potencjalnie nieefektywne.In this case, all records are retrieved on every call to PullAsync, which is potentially inefficient.

  • Przeczyszczanie: Można wyczyścić zawartość za pomocą magazynu lokalnego IMobileServiceSyncTable.PurgeAsync.Purging: You can clear the contents of the local store using IMobileServiceSyncTable.PurgeAsync. Trwałe usuwanie może być konieczne, jeśli zawierają stare dane w bazie danych klienta, czy chcesz odrzucić wszystkie oczekujące zmiany.Purging may be necessary if you have stale data in the client database, or if you wish to discard all pending changes.

    Przeczyszczanie usuwa tabelę z magazynu lokalnego.A purge clears a table from the local store. W przypadku operacji oczekiwanie na synchronizację z bazą danych serwera przeczyszczanie zgłasza wyjątek, chyba że wymuszenie przeczyszczenia zestaw parametrów.If there are operations awaiting synchronization with the server database, the purge throws an exception unless the force purge parameter is set.

    Jako przykład nieaktualnych danych na komputerze klienckim Załóżmy, że w tym przykładzie "Lista czynności do wykonania" urządzenia 1 pobiera tylko elementy, które nie zostały zakończone.As an example of stale data on the client, suppose in the "todo list" example, Device1 only pulls items that are not completed. Czynność do wykonania "Kup mleka" jest oznaczony jako ukończone na serwerze przez inne urządzenie.A todoitem "Buy milk" is marked completed on the server by another device. Jednak urządzenia 1 środki, nieopłacone todoitem "Buy mleka" w magazynie lokalnym ponieważ ciągnie tylko elementy, które nie są oznaczone jako ukończone.However, Device1 still has the "Buy milk" todoitem in local store because it is only pulling items that are not marked complete. Przeczyszczanie powoduje wyczyszczenie tego elementu starych.A purge clears this stale item.

Kolejne krokiNext steps