Azure Mobile Apps’te Çevrimdışı Veri Eşitleme

Çevrimdışı veri eşitleme nedir?

Çevrimdışı veri eşitleme, geliştiricilerin bir ağ bağlantısı olmadan işlevsel uygulamalar oluşturmasını kolaylaştıran bir Azure Mobile Apps istemci ve sunucu SDK özelliğidir.

Uygulamanız çevrimdışı modda olduğunda, yine de bir yerel depoya kaydedilen verileri oluşturabilir ve değiştirebilirsiniz. Uygulama yeniden çevrimiçi olduğunda, yerel değişiklikleri Azure Mobil uygulama arka ucunuz ile eşitlenebilir. Bu özellik, hem istemcide hem de arka uçta aynı kayıt değiştirildiğinde çakışmaların algılanmasının desteğini de içerir. Çakışmalar daha sonra sunucuda veya istemcide işlenebilir.

Çevrimdışı eşitlemenin çeşitli avantajları vardır:

  • Sunucu verilerini yerel olarak cihazda önbelleğe alarak uygulama yanıt hızını geliştirme
  • Ağ sorunları olduğunda faydalı olmaya devam eden sağlam uygulamalar oluşturun
  • Son kullanıcıların, ağ erişimi olmadığında bile veri oluşturmalarına ve değiştirmesine izin ver, çok az veya hiç bağlantı olan senaryolar destekleme
  • Birden çok cihaz genelinde verileri eşitleyin ve aynı kayıt iki cihaz tarafından değiştirildiğinde çakışmaları tespit edin
  • Yüksek Gecikmeli veya tarifeli ağlarda ağ kullanımını sınırlayın

Aşağıdaki öğreticilerde, Azure Mobile Apps kullanarak mobil istemcilerinize nasıl çevrimdışı eşitleme ekleyeceğiniz gösterilmektedir:

Eşitleme tablosu nedir?

"/Tables" uç noktasına erişmek için Azure mobil istemci SDK 'Ları (.NET istemci SDK 'Sı) veya MSTable (iOS istemci) gibi arabirimler IMobileServiceTable sağlar. Bu API 'Ler doğrudan Azure Mobil uygulama arka ucuna bağlanır ve istemci cihazının bir ağ bağlantısı yoksa başarısız olur.

Çevrimdışı kullanımı desteklemek için, uygulamanız bunun yerine (.NET istemci SDK) veya MSSyncTable (iOS istemci) gibi Eşitleme tablosu API 'lerini IMobileServiceSyncTable kullanmalıdır. Aynı CRUD işlemleri (oluşturma, okuma, güncelleştirme, silme), eşitleme tablosu API 'Lerine göre çalışarak, artık yerel bir mağazadanokudukları veya yazdıkları durumlar hariç. Tüm eşitleme tablosu işlemleri gerçekleştirilemeden önce, yerel deponun başlatılmış olması gerekir.

Yerel depo nedir?

Yerel bir depo, istemci cihazında veri Kalıcılık katmanıdır. Azure Mobile Apps istemci SDK 'Ları varsayılan bir yerel mağaza uygulamasını sağlar. Windows, Xamarin ve Android 'de, SQLite temel alır. İOS 'ta temel verileri temel alır.

Windows Phone veya Microsoft Store üzerinde sqlite tabanlı uygulama kullanmak için bir SQLite uzantısı yüklemeniz gerekir. daha fazla bilgi için bkz. Evrensel Windows Platformu: çevrimdışı eşitlemeyi etkinleştirme. Android ve iOS, cihaz işletim sisteminde bir SQLite sürümü ile birlikte gönderilir ve bu nedenle kendi SQLite sürümüne başvurmak gerekli değildir.

Geliştiriciler, kendi yerel mağazalarını da uygulayabilir. Örneğin, verileri mobil istemcide şifreli bir biçimde depolamak isterseniz, şifreleme için SQLCipher kullanan bir yerel depo tanımlayabilirsiniz.

Eşitleme bağlamı nedir?

Bir eşitleme bağlamı , bir mobil istemci nesnesiyle ( IMobileServiceClient veya MSClient gibi) ilişkilendirilir ve eşitleme tabloları ile yapılan değişiklikleri izler. Eşitleme bağlamı, daha sonra sunucusuna gönderilen CUD işlemlerinin sıralı bir listesini (oluşturma, güncelleştirme, silme) tutan bir işlem kuyruğututar.

Yerel bir depo, .NET istemci SDK 'sındaolduğu IMobileServicesSyncContext.InitializeAsync(localstore) gibi bir başlatma yöntemi kullanılarak eşitleme bağlamıyla ilişkilendirilir.

Çevrimdışı eşitlemenin nasıl çalıştığı

Eşitleme tabloları kullanılırken, yerel değişiklikler bir Azure Mobil uygulama arka ucu ile eşitlendiğinde istemci kodunuz kontrol edilir. Yerel değişiklikleri Gönder çağrısı olana kadar arka uca hiçbir şey gönderilmez. Benzer şekilde, yerel depo yalnızca çekme verileri için bir çağrı olduğunda yeni verilerle doldurulur.

  • Gönderim: push, eşitleme bağlamındaki bir işlemdir ve son göndermeden bu yana tüm CUD değişikliklerini gönderir. Aksi takdirde, bazı işlemler sırada gönderilemediğinden yalnızca tek bir tablonun değişikliklerini gönderemeyebilir. Gönderim, Azure Mobil uygulama arka ucunuza bir dizi REST çağrısı yürütür, bu da sunucu veritabanınızı değiştirir.

  • Çekme: çekme, tablo başına temelinde gerçekleştirilir ve sunucu verilerinin yalnızca bir alt kümesini almak için bir sorguyla özelleştirilebilir. Azure mobil istemci SDK 'Ları, sonuçta elde edilen verileri yerel depoya ekler.

  • Örtük gönderim: bekleyen yerel güncelleştirmeleri olan bir tabloya karşı bir çekme yürütülürse, çekme ilk olarak eşitleme bağlamında yürütülür push() . Bu gönderim, zaten kuyruğa alınan değişiklikler ve sunucudan yeni veriler arasındaki çakışmaların en aza indirilmesine yardımcı olur.

  • Artımlı eşitleme: çekme işlemine ilk parametre yalnızca istemcide kullanılan bir sorgu adıdır . Null olmayan bir sorgu adı kullanırsanız, Azure Mobile SDK artımlı eşitlemegerçekleştirir. Bir çekme işlemi bir sonuç kümesi döndürdüğünde, bu sonuç kümesinden en son updatedAt zaman DAMGASı SDK yerel sistem tablolarında depolanır. Sonraki çekme işlemleri yalnızca bu zaman damgasından sonraki kayıtları alır.

    Artımlı eşitleme kullanmak için sunucunuzun anlamlı updatedAt değerler döndürmesi ve ayrıca bu alana göre sıralamayı desteklemesi gerekir. Ancak, SDK updatedAt alanına kendi sıralamasını eklediğinden, kendi orderBy yan tümcesine sahip olan bir çekme sorgusu kullanamazsınız.

    Sorgu adı seçtiğiniz herhangi bir dize olabilir, ancak uygulamanızdaki her bir mantıksal sorgu için benzersiz olmalıdır. Aksi takdirde, farklı çekme işlemleri aynı artımlı eşitleme zaman damgasının üzerine yazabilir ve sorgularınız hatalı sonuçlar döndürebilir.

    Sorguda bir parametre varsa, benzersiz bir sorgu adı oluşturmanın bir yolu parametre değerini kullanmaktır. Örneğin, Kullanıcı kimliği ' nde filtrelerken, sorgu adınız aşağıdaki gibi olabilir (C# ' de):

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

    Artımlı eşitleme ' yi devre dışı bırakmak istiyorsanız sorgu KIMLIĞI olarak geçirin null . Bu durumda, tüm kayıtlar ' a her çağrıda PullAsync alınır ve bu da verimsiz olabilir.

  • Temizleme: kullanarak IMobileServiceSyncTable.PurgeAsync Yerel deponun içeriğini temizleyebilirsiniz. İstemci veritabanında eski veriler varsa veya bekleyen tüm değişiklikleri atmak istiyorsanız Temizleme işlemi gerekebilir.

    Bir Temizleme, bir tabloyu yerel depodan temizler. Sunucu veritabanıyla eşitleme bekleyen işlemler varsa Temizleme, temizlemeyi zorla parametresi ayarlanmadığı takdirde bir özel durum oluşturur.

    İstemcide eski verilerin bir örneği olarak, "Todo List" örneğinde, Device1 yalnızca tamamlanmamış öğeleri çeker. "Satın alma morijinalini" bir TodoItem, sunucuda başka bir cihaz tarafından tamamlandı olarak işaretlenir. Ancak, yalnızca tamamlandı olarak işaretlenmemiş öğeleri çektiğinden, Device1 yine de yerel depoda "mılalk" TodoItem. Bir Temizleme, bu eski öğeyi temizler.

Sonraki adımlar