Offline adatszinkronizálás

Az offline adatszinkronizálás az Azure Mobile Apps SDK-funkciója. Az adatok tárolása helyi tárolóban történik. Ha az alkalmazás offline állapotban van, továbbra is létrehozhatja, módosíthatja és keresheti az adatokat. Az adatok szinkronizálva lesznek az Azure Mobile Apps szolgáltatással, amikor az eszköz online állapotban van. Az SDK támogatja az ütközések feloldását, ha ugyanaz a rekord módosul az ügyfélen és a szolgáltatáson is.

Az offline szinkronizálás számos előnnyel jár:

  • Javítja az alkalmazások válaszkészségét
  • Az alkalmazás megbízhatóságának javítása rossz hálózati kapcsolat esetén
  • Korlátozza a hálózathasználatot a nagy késésű vagy forgalmi díjas hálózatokon
  • Támogatja a leválasztott használatot

Az alábbi oktatóanyagok bemutatják, hogyan adhat offline szinkronizálást a mobilalkalmazásokhoz az Azure Mobile Apps használatával:

Mi az a szinkronizálási tábla?

Az Azure Mobile Apps SDK-k biztosítják IRemoteTable<T>a szolgáltatást közvetlenül elérő szolgáltatást. A művelet meghiúsul, ha az eszköz nem rendelkezik hálózati kapcsolattal. A (megadottIOfflineTable<T>) szinkronizálási tábla ugyanazokat a műveleteket biztosítja egy helyi tárolón. A helyi tároló ezután később szinkronizálható a szolgáltatással. Mielőtt bármilyen műveletet végrehajt, inicializálnia kell a helyi tárolót.

Mi az a helyi áruház?

A helyi tároló az ügyféleszköz adatmegőrzési rétege. A legtöbb platform az SQLite-t használja a helyi tárolóhoz, de az iOS a Core Data-t használja. Saját helyi áruházat is megvalósíthat. Az SQLite és az SQLCipher használatával például titkosított tárolót hozhat létre.

Hogyan működik az offline szinkronizálás?

Az ügyfélkód szabályozza, hogy a helyi módosítások szinkronizálódnak-e egy adatszinkronizálási szolgáltatással. A rendszer nem küld semmit a szolgáltatásnak, amíg le nem küldi a helyi módosításokat. Hasonlóképpen, a helyi tároló csak az adatok lekérésekor töltődik fel új vagy frissített adatokkal.

A függőben lévő műveleteket leküldheti az összes táblához, a táblák listájához vagy egy táblához:

// All tables
await client.PushTablesAsync();

// A list of tables
var tablesToPush = new string[] { "table1", "table2" };
await client.PushTablesAsync(tablesToPush);

// A single table
await table.PushItemsAsync();

Synchronization

A leküldéses művelet elküldi az operatív üzenetsor összes függőben lévő módosítását a szolgáltatásnak. A függőben lévő módosítást egy HTTP REST-hívással küldi el a szolgáltatásnak, amely módosítja az adatbázist.

A leküldéses műveletek minden lekéréses művelet előtt befejeződnek. A lekéréses művelet lekéri a módosított adatokat a szolgáltatásból, és a helyi tárolóban tárolja.

Implicit leküldés

Ha lekérést hajt végre egy olyan táblán, amely helyi frissítésekre van függőben, a lekérés először leküldést hajt végre a táblához. Ez a leküldés segít minimalizálni a már várólistára helyezett módosítások és a kiszolgálóról származó új adatok közötti ütközéseket. Ha szeretné, konfigurálhatja az összes tábla leküldését a következő PullOptionsbeállítássalPushOtherTables:

var pullOptions = new PullOptions { PushOtherTables = true };
await table.PullItemsAsync(pullOptions);

Rekordok részhalmazának lekérése

Megadhat egy lekérdezést, amely meghatározza, hogy mely rekordokat kell szerepeltetni az offline adatbázisban. Például:

var query = table.CreateQuery().Where(x => x.Color == "Blue");
await table.PullItemsAsync(query);

Növekményes szinkronizálás

Az Azure Mobile Apps növekményes szinkronizálást valósít meg. Csak az utolsó lekéréses művelet óta megváltozott rekordok lesznek lekérve. A növekményes szinkronizálás időt és sávszélességet takarít meg nagy táblák feldolgozásakor.

Minden egyes egyedi lekérdezés esetében az UpdatedAt utolsó sikeresen átvitt rekord mezője jogkivonatként lesz tárolva az offline tárolóban. Az utolsó UpdatedAt érték a delta-token tárolóban van tárolva. A delta-token tároló táblaként van implementálva az offline áruházban.

Teljesítmény és konzisztencia

A szinkronizálás időnként idő előtt leáll. Például:

  • A szinkronizáláshoz használt hálózat elérhetetlenné válik a szinkronizálási folyamat során.
  • A szinkronizálás során kényszerítheti az alkalmazás bezárását.

Az offline adatbázisban előforduló konzisztenciaproblémák kockázatának minimalizálása érdekében a rendszer minden rekordot a beérkezéskor az adatbázisba ír. Dönthet úgy is, hogy kötegekben írja be a rekordokat az adatbázisba. A kötegelt műveletek növelik az offline adatbázis írási teljesítményét a lekéréses művelet során. Ugyanakkor növelik a tábla metaadatai és a táblán belüli adatok közötti inkonzisztencia kockázatát is.

Az írások közötti időközt az alábbiak szerint hangolhatja:

var pullOptions = new PullOptions { WriteDeltaTokenInterval = 25 };
await table.PullItemsAsync(pullOptions);

Ez a kód 25 rekordból álló kötegekbe gyűjti az írásokat. A teljesítménytesztelés azt javasolja, hogy a teljesítmény 25-ig javuljon. A WriteDeltaTokenInterval 25-nél nagyobb értékek nem javítják jelentősen a teljesítményt.

Öblítés

A helyi tároló tartalmának törléséhez használja a következőt IOfflineTable<T>.PurgeItemsAsync: . A törlésre akkor lehet szükség, ha elavult adatokkal rendelkezik az ügyféladatbázisban, vagy ha el szeretné vetni az összes függőben lévő módosítást. A törlés törli a táblázatot a helyi áruházból. Táblázat törlése:

await table.PurgeItemsAsync("", new PurgeOptions());

A PurgeItemsAsync() metódus hibát jelez InvalidOperationException , ha függőben lévő változások vannak a táblában. Ebben az esetben kényszerítheti a törlést:

await table.PurgeItemsAsync("", new PurgeOptions { DiscardPendingOperations = true });

A törlés utolsó lehetőség az offline áruházban lévő táblák megtisztítására, mivel törli az összes rekordot a gyorsítótárból, és újra le kell töltenie őket.