Sinkronisasi data offline
Nota
Produk ini dihentikan. Untuk pengganti proyek yang menggunakan .NET 8 atau yang lebih baru, lihat pustaka Community Toolkit Datasync.
Sinkronisasi data offline adalah fitur SDK dari Azure Mobile Apps. Data disimpan di penyimpanan lokal. Saat aplikasi offline, Anda masih dapat membuat, memodifikasi, dan mencari data. Data disinkronkan dengan layanan Azure Mobile Apps Anda saat perangkat Anda online. SDK mendukung resolusi konflik ketika rekaman yang sama diubah pada klien dan layanan.
Sinkronisasi offline 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:
- Avalonia: Aktifkan sinkronisasi offline
- .NET MAUI: Mengaktifkan sinkronisasi offline
- Platform Uno: Mengaktifkan sinkronisasi offline
- Windows (UWP): Aktifkan sinkronisasi offline
- Windows (WinUI3): Aktifkan sinkronisasi offline
- Windows (WPF): Aktifkan sinkronisasi offline
- Xamarin.Android: Mengaktifkan sinkronisasi offline
- Xamarin.Forms: Mengaktifkan sinkronisasi offline
- Xamarin.iOS: Mengaktifkan sinkronisasi offline
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 toko lokal?
Penyimpanan lokal adalah lapisan persistensi data pada perangkat klien. Sebagian besar platform menggunakan SQLite untuk penyimpanan lokal, tetapi iOS menggunakan Core Data. Anda juga dapat menerapkan toko lokal 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 pendorongan 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 pendorongan dilakukan sebelum operasi penarikan. Operasi penarikan menarik data yang diubah 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 diantrekan 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, bidang UpdatedAt
rekaman terakhir yang berhasil ditransfer disimpan sebagai token di penyimpanan offline. Nilai UpdatedAt
terakhir 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. Pembersihan membersihkan tabel dari penyimpanan lokal. Untuk menghapus menyeluruh tabel:
await table.PurgeItemsAsync("", new PurgeOptions());
Metode PurgeItemsAsync()
melemparkan kesalahan InvalidOperationException
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.