Bagikan melalui


Sinkronisasi data offline

Sinkronisasi data luring adalah fitur SDK dari Azure Mobile Apps. Data disimpan di penyimpanan lokal. Saat aplikasi Anda luring, Anda masih dapat membuat, memodifikasi, dan mencari data. Data disinkronkan dengan layanan Azure Mobile Apps Anda saat perangkat Anda sedang daring. SDK mendukung resolusi konflik ketika rekaman yang sama diubah pada klien dan layanan.

Sinkronisasi luring memiliki beberapa manfaat:

  • Meningkatkan respons aplikasi
  • Meningkatkan keandalan aplikasi saat ada konektivitas jaringan yang buruk
  • Membatasi penggunaan jaringan pada latensi tinggi atau jaringan terukur
  • Mendukung penggunaan terputus

Tutorial berikut menunjukkan cara menambahkan sinkronisasi offline ke klien seluler Anda dengan menggunakan Azure Mobile Apps:

Apa itu tabel sinkronisasi?

Azure Mobile Apps SDK menyediakan IRemoteTable<T>, yang mengakses layanan secara langsung. Operasi gagal jika perangkat tidak memiliki koneksi jaringan. Tabel sinkronisasi (disediakan oleh IOfflineTable<T>) menyediakan operasi yang sama terhadap penyimpanan lokal. penyimpanan lokal kemudian dapat disinkronkan dengan layanan di lain waktu. Sebelum melakukan operasi apa pun, Anda harus menginisialisasi penyimpanan lokal.

Apa itu penyimpanan lokal?

Penyimpanan lokal adalah lapisan persistensi data pada perangkat klien. Sebagian besar platform menggunakan SQLite untuk penyimpanan lokal, tetapi iOS menggunakan Data Core. Anda juga dapat menerapkan penyimpanan Anda sendiri. Misalnya, gunakan versi SQLite dengan SQLCipher untuk menghasilkan penyimpanan terenkripsi.

Bagaimana cara kerja sinkronisasi offline?

Kode klien Anda mengontrol kapan perubahan lokal disinkronkan dengan layanan sinkronisasi data. Tidak ada yang dikirim ke layanan sampai Anda mendorong perubahan lokal. Demikian pula, penyimpanan lokal diisi dengan data baru atau yang diperbarui hanya saat Anda menarik data.

Anda dapat mendorong operasi yang tertunda untuk semua tabel, daftar tabel, atau satu tabel:

// 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();

Sinkronisasi

Operasi push mengirimkan semua perubahan yang tertunda dalam antrean operasi ke layanan. Perubahan tertunda dikirim ke layanan melalui panggilan HTTP REST, yang pada gilirannya memodifikasi database Anda.

Operasi push dilakukan sebelum operasi tarik. Operasi tarik menarik data yang berubah dari layanan dan menyimpannya di penyimpanan lokal.

Dorongan implisit

Jika Anda menjalankan penarikan terhadap tabel yang telah menunggu pembaruan lokal, penarikan terlebih dahulu menjalankan dorongan untuk tabel tersebut. Dorongan ini membantu meminimalkan konflik antara perubahan yang sudah diantrikan dan data baru dari server. Anda dapat secara opsional mengonfigurasi dorongan semua tabel dengan mengatur PushOtherTables di PullOptions:

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

Menarik subset rekaman

Anda bisa, secara opsional, menentukan kueri yang digunakan untuk menentukan rekaman mana yang harus disertakan dalam database offline. Misalnya:

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

Sinkronisasi inkremental

Azure Mobile Apps menerapkan sinkronisasi bertahap. Hanya rekaman yang telah berubah sejak operasi penarikan terakhir yang ditarik. Sinkronisasi inkremental menghemat waktu dan bandwidth saat Anda memproses tabel besar.

Untuk setiap kueri unik, UpdatedAt bidang rekaman terakhir yang berhasil ditransfer disimpan sebagai token di penyimpanan offline. Nilai terakhir UpdatedAt disimpan di penyimpanan delta-token. Penyimpanan delta-token diimplementasikan sebagai tabel di penyimpanan offline.

Performa dan konsistensi

Sinkronisasi terkadang berhenti sebelum waktunya. Misalnya:

  • Jaringan yang Anda gunakan untuk sinkronisasi menjadi tidak tersedia selama proses sinkronisasi.
  • Anda menutup paksa aplikasi selama sinkronisasi.

Untuk meminimalkan risiko masalah konsistensi dalam database offline, setiap rekaman ditulis ke database seperti yang diterima. Anda dapat, secara opsional, memutuskan untuk menulis rekaman ke database dalam batch. Operasi batch meningkatkan performa penulisan database offline selama operasi penarikan. Namun, mereka juga meningkatkan risiko inkonsistensi antara metadata tabel dan data dalam tabel.

Anda dapat menyetel interval antara penulisan sebagai berikut:

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

Kode ini mengumpulkan tulisan ke dalam batch dari 25 rekaman. Pengujian performa menunjukkan bahwa performa meningkat hingga nilai 25. Nilai WriteDeltaTokenInterval yang lebih besar dari 25 tidak secara signifikan meningkatkan performa.

Membersihkan

Anda dapat menghapus konten penyimpanan lokal dengan menggunakan IOfflineTable<T>.PurgeItemsAsync. Pembersihan mungkin diperlukan jika Anda memiliki data kedaluarsa dalam database klien, atau jika Anda ingin membuang semua perubahan yang tertunda. Satu pembersihan menghilangkan satu tabel dari penyimpanan lokal. Untuk menghapus menyeluruh tabel:

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

Metode ini PurgeItemsAsync() melemparkan InvalidOperationException kesalahan jika ada perubahan yang tertunda dalam tabel. Dalam hal ini, Anda dapat memaksa pembersihan terjadi:

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

Pembersihan adalah upaya terakhir untuk membersihkan tabel di penyimpanan offline, karena menghapus semua rekaman dari cache dan mengharuskan Anda mengunduh ulang tabel tersebut.