Şu anda aynı gereksinimleri ve sorunları olan bir mobil / masaüstü / dağıtık uygulama üzerinde çalışıyorum.
Her şeyden önce, bu gereksinimler kendi başına mobil uygulamalara özgü değildir, ancak bağlantısı kesilmiş / dağıtılmış istemci-sunucu işlemlerine özgüdür (paralel programlama, çoklu okuma, siz anlayın). Elbette bunlar mobil uygulamalarda ele alınacak tipik konular.
Genel olarak, tüm bunların kaynaştığı şey, aynı anda düzenleyebilecek n müşterilere dağıtılan potansiyel bir veri kaydınızın olmasıdır. İhtiyacın olan şey
- uygun bir versiyon kontrol / kilitleme mekanizması,
- uygun bir hak / erişim yönetimi,
- uygun bir senkronizasyon / önbellek stratejisi
(1) için bazı desenler uygulayabilirsiniz: Sık kullanılan iki kilitleme stratejisi vardır: İyimser Çevrimdışı Kilitleme ve Kötümser Çevrimdışı Kilitleme . Bunlardan bazıları, her değiştirilen kayıt için güncellenen her veri kaydı için bir sayaç kullanan (çok basit bir "zaman damgası" gibi) MultiVersion Eşzamanlılık Kontrolü (MVCC) gibi farklı sürüm kontrol "kalıpları" nda uygulanır. .
(2) ve (3), (1) den bağımsız olarak ele alınması gereken çok geniş konulardır. Tecrübelerime dair bir tavsiye:
Sizin için sorunların çoğunu ortadan kaldıran bir istemci-sunucu teknolojisi kullanın. İyimser Çevrimdışı Kilitleme + MVCC, (2) Web API aracılığıyla (1) ve (3) Http önbelleğe alma yoluyla çok iyi çalışan CouchDb gibi bazı web teknolojilerini tavsiye ederim .
Kanıtlanmış teknolojilere ve yaklaşımlara güveniyorsanız, kendiniz bir şey icat etmemeye çalışın. Mevcut teknolojileri / kalıpları araştırmak ve karşılaştırmak için harcanan herhangi bir saatin kendi sistemlerinizi uygulamaya çalışmaktan çok daha iyi harcandığına inanıyorum.
Mümkünse homojen teknolojiler kullanmaya çalışın. "Homojen" derken, aynı ilkeleri göz önünde bulundurarak oluşturulan teknolojileri, örneğin web 2.0 kullanım senaryolarını kastediyorum. Örnek: Yerel önbelleğe alma stratejisiyle uygun bir CouchDb ve REST İstemcisi (Web API) kullanmak, mobil uygulamalar için SQL kullanmaktan daha iyi bir seçimdir.
Bu tür kullanım senaryoları için açıkça yaratılmayan bir teknoloji olduğu için MySQL'in kullanılmasını şiddetle tavsiye ediyorum. Çalışıyor, ancak zaten web iletişimini ve eşzamanlılık stilini (örneğin, NoSQL Veritabanları gibi) içeren bir veritabanı sistemiyle daha iyi bir şekilde çalışıyorsunuz.
Bu arada, CouchDb için, harika çalışan ve ölçekleyen CouchDb API'lerine karşı çalışan özel bir yerel müşteriyle karar kıldım. MSQL + (N) Hazırda Bekletme özelliğini kullanmaya başladım ve ilk önce doğru seçimi yapmamak (yeterli araştırma yapmamak demek) için yüksek bir bedel ödedim.