Karar vermeniz gereken ilk şey, çelişkili değişiklikler olması durumunda hangi tarafın "yetkili" kabul edileceğine dair genel bir politikadır.
Yani: 125 Numaralı Kaydın 5 Ocak saat 10: 00'da sunucuda değiştirildiğini ve aynı kayıt telefonlardan birinde (buna İstemci A diyelim) 5 Ocak 23: 00'da değiştirildiğini varsayalım. Son senkronizasyon 3 Ocak'ta yapıldı. Daha sonra kullanıcı, örneğin 8 Ocak'ta yeniden bağlanır.
Neyin değiştirilmesi gerektiğini belirlemek, hem istemcinin hem de sunucunun son senkronizasyon tarihini bilmesi anlamında "kolaydır", bu nedenle , son senkronizasyonun uzlaştırılması gerektiğinden, oluşturulan veya güncellenen her şey (bu konuda daha fazla bilgi için aşağıya bakın).
Öyleyse, değiştirilen tek kaydın # 125 olduğunu varsayalım. Ya ikisinden birinin otomatik olarak "kazandığına" ve diğerinin üzerine yazdığına karar verirsiniz ya da bir kullanıcının hangi sürümün (sunucu veya istemci) doğru sürümün üzerine yazarak karar verebileceği bir uzlaştırma aşamasını desteklemeniz gerekir.
Bu karar son derece önemlidir ve müşterilerin "rolüne" ağırlık vermelisiniz. Özellikle yalnızca istemci ve sunucu arasında olası bir çelişki varsa, farklı istemcilerin aynı kayıtları değiştirebilmesi durumunda.
[# 125'in ikinci bir istemci (İstemci B) tarafından değiştirilebileceğini varsayarsak, henüz senkronize edilmemiş olan Müşteri B'nin aynı kaydın başka bir sürümünü sağlaması ve önceki uyuşmazlık çözümünü tartışmaya açması ihtimali vardır]
Yukarıdaki " oluşturulan veya güncellenen " noktayla ilgili olarak ... istemcilerden birinde oluşturulmuşsa bir kaydı nasıl doğru bir şekilde tanımlayabilirsiniz (bunun sorunlu etki alanınızda mantıklı olduğunu varsayarak)? Uygulamanızın bir iş bağlantıları listesini yönettiğini varsayalım. Müşteri A, yeni oluşturulmuş bir John Smith eklemeniz gerektiğini söylüyorsa ve sunucu dün Müşteri D tarafından oluşturulmuş bir John Smith'e sahipse ... farklı kişiler olmadıklarından emin olamadığınız için iki kayıt mı oluşturuyorsunuz? Kullanıcıdan bu çatışmayı da uzlaştırmasını isteyecek misiniz?
Müşteriler bir veri alt kümesinin "sahipliğine" sahip mi? Yani İstemci B, Alan # 5 için veriler üzerinde "otorite" olarak ayarlanmışsa, Müşteri A Alan # 5 için kayıtları değiştirebilir / oluşturabilir mi? (Bu, bazı uyuşmazlıkları çözmeyi kolaylaştırır, ancak sizin durumunuz için uygun olmayabilir).
Özetlemek gerekirse, ana sorunlar şunlardır:
- Ayrılmış istemcilerin yeni bir kayıt oluşturmadan önce sunucuya erişmemiş olabileceği dikkate alınarak "kimlik" nasıl tanımlanır.
- Önceki durum, çözüm ne kadar karmaşık olursa olsun, veri tekrarına neden olabilir, bu nedenle bunları periyodik olarak nasıl çözeceğinizi ve müşterilere "Kayıt # 675" olarak gördükleri şeyin gerçekte nasıl birleştirildiğini / yerine geçtiğini nasıl bildireceğinizi öngörmelisiniz. Kayıt # 543
- Uyuşmazlıkların fiat ile çözülüp çözülmeyeceğine karar verin (ör. "Sunucu sürümü, önceki senkronizasyondan bu yana güncellendiyse her zaman istemcininkini geçecek ") veya manuel müdahale ile
- Fiat durumunda , özellikle müşterinin öncelikli olduğuna karar verirseniz, daha fazla değişikliğe sahip olabilecek diğer, henüz senkronize edilmemiş istemcilerle nasıl başa çıkacağınıza da dikkat etmelisiniz.
- Önceki öğeler, verilerinizin ayrıntı düzeyini hesaba katmaz (işleri açıklamayı daha basit hale getirmek için). Benim örneğimde olduğu gibi, "Kayıt" düzeyinde mantık yürütmek yerine, bunun yerine alan düzeyinde değişikliği kaydetmeyi daha uygun bulabileceğinizi söylemek yeterli. Veya bir dizi kayıt üzerinde çalışmak için (örneğin, Kişi kaydı + Adres kaydı + Kişiler kaydı) bir seferde toplamlarını bir tür "Meta Kayıt" olarak ele alarak.
Kaynakça:
Elbette Wikipedia'da daha fazlası .
Vdirsyncer yazarından basit bir senkronizasyon algoritması
Veri senkronizasyonu hakkında OBJC makalesi
SyncML®: Mobil Verilerinizi Senkronize Etme ve Yönetme (Book on O'Reilly Safari)
Sorunsuz Çoğaltılmış Veri Türleri
İyimser Çoğaltma YASUSHI SAITO (HP Laboratories) ve MARC SHAPIRO (Microsoft Research Ltd.) - ACM Computing Surveys, Cilt. V, No. N, 3 2005.
Alexander Traud, Juergen Nagler-Ihlein, Frank Kargl ve Michael Weber. 2008. SyncML'yi Yeniden Kullanarak Döngüsel Veri Senkronizasyonu. Dokuzuncu Uluslararası Mobil Veri Yönetimi Konferansı (MDM '08) Bildirilerinde. IEEE Bilgisayar Topluluğu, Washington, DC, ABD, 165-172. DOI = 10.1109 / MDM.2008.10 http://dx.doi.org/10.1109/MDM.2008.10
Lam, F., Lam, N. ve Wong, R. 2002. Mobil XML verileri için verimli senkronizasyon. Onbirinci Uluslararası Bilgi ve Bilgi Yönetimi Konferansı Bildirilerinde (McLean, Virginia, ABD, 04-09 Kasım 2002). CIKM '02. ACM, New York, NY, 153-160. DOI = http://doi.acm.org/10.1145/584792.584820
Cunha, PR ve Maibaum, TS 1981. Kaynak ve eşitlik; soyut veri tipi + senkronizasyon - Mesaj odaklı programlama için bir metodoloji -. 5. Uluslararası Yazılım Mühendisliği Konferansı Bildirilerinde (San Diego, California, Amerika Birleşik Devletleri, 09 - 12 Mart 1981). Uluslararası Yazılım Mühendisliği Konferansı. IEEE Press, Piscataway, NJ, 263-272.
(Son üçü ACM dijital kitaplığındandır, üye olup olmadığınız veya diğer kanallardan edinebileceğiniz hakkında hiçbir fikriniz yok)
Gönderen Dr.Dobbs sitede:
- Bill Wagner tarafından SQL Server CE ve SQL RDA ile Uygulama Oluşturma 19 Mayıs 2004 (Hem masaüstü hem de mobil PC için bir uygulama tasarlamak için en iyi uygulamalar - Windows / .NET)
Arxiv.org'dan:
- Çatışmasız Çoğaltılmış JSON Veri Türü - makale bir JSON CRDT uygulamasını açıklamaktadır (Çatışmasız çoğaltılmış veri türleri - CRDT'ler - eşzamanlı değişiklikleri destekleyen ve bu tür eşzamanlı güncellemelerin yakınsamasını garanti eden bir veri yapıları ailesidir).