Android uygulaması için ilişkisel veritabanına doğrudan erişim yerine web hizmetlerini neden kullanmalıyım?


19

Web üzerinde uzak bir yerde merkezi bir veritabanına nasıl verimli bir şekilde erişmek için arama ve bir veritabanına doğrudan erişim (yani JDBC vb) yerine web hizmetlerini kullanmak için öneriler bir araya geldi. Bunun nedenini ve diğer önerilerini merak ediyorum .

Yanıtlar:


25

Bir web hizmeti katmanı eklemek, hem gerekli CPU gücü hem de işlem sırasında kullanılan bant genişliği açısından müşterinizi daha hafif hale getirme fırsatı verir. Her iki faktör de son kullanıcılar için son derece önemlidir:

  • Daha az CPU kullanmak pil ömrünü uzatır,
  • Daha az bant genişliği kullanmak, ölçülü planları olan kullanıcılar için aylık ödemeleri azaltır

Bir web uygulaması katmanı tanıtarak, işlemin büyük kısmını elde taşınabilir bir mobil düşük güç, düşük bant genişliği, düşük bellek istemcisinden, daha fazla belleğe sahip takılı, yüksek güçlü yüksek bant genişliğine sahip bir sunucuya taşırsınız. ihtiyaçlar - işleme ve iletişimin bir istemcide maliyetinin çok daha azına mal olduğu bir ortam.

Ama bekleyin, sizin için de bir şey var: sistemi bölerek iş kurallarınız, veritabanınızın yapısı ve orada bulunanların sürümleri üzerinde daha fazla kontrol elde edersiniz. Bir mobil istemcinin veritabanına doğrudan bağlanmasına izin verdiğinizde, tasarımınız bu veritabanı yapısıyla "evli" olur: hemen hemen her değişiklik, uygulamasını yükseltmek konusunda isteksiz olabilecek bir istemciyle geriye dönük uyumluluğu bozar.

Buna karşılık, arasına bir web hizmeti eklemek, arayüzü mobil istemcilere daha yönetilebilir bir şekilde geliştirmenize olanak tanır: örneğin, eski arayüzü yerinde tutabilir, onunla "paralel" çalışan yeni bir tane ekleyebilir ve ardından tamamen tek bir istemciyi bozmadan veritabanınızı yeniden yapılandırın.

Web hizmetinizi tasarlarken bazı oldukça temel tasarım ilkelerini izlerseniz, yerine yerleştirilen olgun sunucu tarafı altyapısını yeniden kullanarak da önemli avantajlar elde edebilirsiniz: örneğin, önbellek ve proxy hizmetlerini ücretsiz olarak alabilirsiniz.

Son olarak, bu, uygulamanızı, kendinize hizmet edemeyeceğiniz platformlara maruz bırakan ve sonuç olarak şirketinizin avantajına göre oynayan diğer geliştiricilerin kapısını açacaktır.


1
"Hem gerekli CPU gücü hem de işlem sırasında kullanılan bant genişliği açısından" aradığım kilit nokta buydu. teşekkürler
yesildal

4
Ayrıca, uygulamanız doğrudan veritabanıyla iletişim kuruyorsa, veritabanınızdaki her tabloyu bırakan birinden yalnızca ters derleyicisiniz. Bir web uygulaması ile çok daha hassas kontroller kullanabilir ve bunun gibi şeyleri durdurabilirsiniz
Earlz

1
@Earlz: bir web uygulaması için bunu isteyerek yapacağım değil, ancak çoğu veritabanı sunucusunun oldukça sağlam ve ince taneli izinleri var. Alt tablo izinlerine sahip bir web kullanıcısı için mazeret yok.
Wyatt Barnett

1
@WyattBarnett tamam ... saklı yordamlar ve benzerleri olmadan, bir kullanıcının kullanıcı profilini güncellemesine nasıl izin verirsiniz? KULLANICILAR tablosuna okuma / yazma izni ... Bunların kendilerine ait olmayan satırları silmelerini veya düzenlemelerini engelleyen şey .. hatta onların olmayan satırları okuması. Hiçbir veritabanı sunucusu saklı yordamlar veya bazılarını kullanmadan bu tür ince taneli olduğundan eminim
Earlz

@Earlz - farkında olduğum herhangi bir şey değil, ama bu noktanın yanı sıra - neden doğrudan veritabanınızla konuşacaksınız ve bu aklı başında olmak için veritabanı özelliklerini kasten görmezden geleceksiniz? Ve profil odaklı bir şey yapar ve bu şekilde ağır günceller misiniz?
Wyatt Barnett

13

Uygulama ve DB arasına bir soyutlama katmanı koyar. Bu size aşağıdaki gibi birçok avantaj sağlar:

  • DB'ye erişimi yalnızca uygulamanın ihtiyaç duyduğu parçalarla sınırlama. Bu hem uygulamanın kodunu basitleştirir hem de DB'nizi güvende tutar.
  • DB'nin iç çalışmasını soyutlar, bu nedenle daha sonra şemanızı, sorgularınızı veya hatta tüm veritabanınızı değiştirmeye karar verdiyseniz, orta katmanı doğru bir şekilde koruduğunuz sürece uygulamanızın bağlantısı kopmaz.
  • Bir DB kapsamı dışında işlevsellik eklemenizi sağlar. Örneğin oldukça sabit olan verileri önbelleğe alma. İş kuralları DB'den ayrı olması gereken bir başka bölümdür .

1
Başka bir avantaj, istemci tarafı veya sunucu tarafı (veya her ikisi de farklı amaçlar için) önbellek eklemenize izin vermesidir.
TMN

@TMN - İyi nokta!
Sistem Aşağı

Tamam ama bu gerçekler her türlü web uygulaması için de geçerli, değil mi? Bir katman (web hizmetleri) eklemek, hızlı yanıt vermesi beklenen bir mobil uygulama için yanıt süresini uzatıyor mu?
yeşildal

1
@yesildal - Evet, hala geçerlidirler. Aslında, tüm uygulama türleri için geçerlidir. Ancak, web uygulamalarında web hizmetlerini kullanmaya devam etmek zorunda kalmazsınız ve bu işlevleri yalnızca kendi montajlarında (örneğin) izole edebilirsiniz. Web uygulamalarını uzak uygulamalar (telefon uygulamaları gibi) için kullanmanın nedeni, DB sunucusunun yakın olmamasıdır.
Sistem Aşağı

@yesildal - re performans: gerçekten değil, eğer 1 kullanıcınız varsa, evet, sonucu döndürmede ekstra bir gecikme olacaktır, ancak bir milyon kullanıcınız varsa işler farklıdır ve kodu 2 sunucuya bölmek genel performans daha hızlı.
gbjbaanb

4

DB'yi doğrudan maruz bırakmamak için başka bir neden - ulaşım. Çoğu ilişkisel veri tabanı, yani JDBC ile konuşulan şeyler genel olarak kamuya açık internet için tasarlanmamıştır. Kablosuz internet, kamuya açık internetin korkunç bir güvenilmez sonu. İstisna yönetimi kabus olur ve işlemlerinizi kaybetmemek için büyük olasılıkla uygulamanızın içindeki web hizmetleri katmanının tersini yazabilirsiniz.

HTTP konuşan ve bu tür şeyler için uygun olabilecek bazı yeni veritabanları vardır. Ayrıca, tür uygulama kodunu veritabanına koymanın yollarını sunma eğilimindedirler. CouchDb veya RavenDb'ye bakmak isteyebilirsiniz - her ikisi de, birçok modern web hizmeti gibi, json ve http üzerinde çalışan harita / azaltma özelliklerine sahip belge dbs'leri.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.