Dlaczego warto korzystać z usług internetowych zamiast bezpośredniego dostępu do relacyjnej bazy danych dla aplikacji na Androida?

19

Szukałem w Internecie, jak skutecznie uzyskać dostęp do centralnej bazy danych w zdalnej lokalizacji i spotkałem się z sugestiami dotyczącymi korzystania z usług internetowych zamiast bezpośredniego dostępu (np. JDBC itp.) Do bazy danych. Zastanawiam się nad tym i innymi sugestiami .

takildal
źródło

Odpowiedzi:

25

Dodanie warstwy usług internetowych daje możliwość uczynienia swojego klienta lżejszym, zarówno pod względem wymaganej mocy procesora, jak i przepustowości wykorzystywanej podczas przetwarzania. Oba czynniki są niezwykle ważne dla użytkowników końcowych:

  • Zużycie mniej procesora wydłuża żywotność baterii,
  • Korzystanie z mniejszej przepustowości zmniejsza miesięczne płatności dla użytkowników z planowanymi taryfami

Wprowadzając warstwę aplikacji sieciowej, przenosisz większość przetwarzania z przenośnego przenośnego klienta o małej mocy, niskiej przepustowości i niskiej pamięci do podłączonego serwera o dużej przepustowości o dużej mocy, który ma więcej pamięci niż on potrzeby - środowisko, w którym przetwarzanie i komunikacja kosztują ułamek tego, co kosztują klienta.

Ale poczekaj, jest w tym także coś dla ciebie: dzieląc system, zyskujesz większą kontrolę nad regułami biznesowymi, strukturą bazy danych i wersjami tego, co tam jest. Po zezwoleniu klientowi mobilnemu na bezpośrednie połączenie z bazą danych projekt jest „powiązany” ze strukturą bazy danych: prawie każda zmiana spowodowałaby naruszenie kompatybilności wstecznej z klientem, który może nie chcieć uaktualnić swojej aplikacji.

W przeciwieństwie do tego, dodanie usługi internetowej pomiędzy pozwala ewoluować interfejs do klientów mobilnych w bardziej zarządzalny sposób: na przykład, możesz utrzymać stary interfejs na miejscu, dodać nowy, który działa „równolegle” z nim, a następnie całkowicie zrestrukturyzuj bazę danych bez zerwania jednego klienta.

Jeśli przestrzegasz kilku podstawowych zasad projektowania podczas projektowania usługi sieci web, możesz również uzyskać znaczące korzyści, korzystając z wdrożonej dojrzałej infrastruktury po stronie serwera: na przykład możesz bezpłatnie uzyskać pamięć podręczną i usługi proxy.

Wreszcie otworzy to drzwi dla innych programistów udostępniających twoją aplikację platformom, których sam nie byłbyś w stanie obsłużyć, ostatecznie grając na korzyść Twojej firmy.

dasblinkenlight
źródło
1
„Zarówno pod względem wymaganej mocy procesora, jak i przepustowości używanej podczas przetwarzania” był kluczowy punkt, którego szukałem. Dzięki
tak,
4
Ponadto, jeśli Twoja aplikacja komunikuje się bezpośrednio z bazą danych, jesteś po prostu kompilatorem wstecznym z dala od kogoś, kto upuści każdą tabelę w bazie danych. Dzięki aplikacji internetowej możesz używać bardziej szczegółowej kontroli i powstrzymywać takie rzeczy
Earlz
1
@Ellz: nie żebym kiedykolwiek chętnie zrobiłby to dla aplikacji internetowej, ale większość serwerów baz danych ma raczej solidne i drobnoziarniste uprawnienia. Nie ma usprawiedliwienia dla użytkownika sieci z uprawnieniami do upuszczania tabeli.
Wyatt Barnett
1
@WyattBarnett ok ... bez procedur przechowywanych itp., W jaki sposób pozwoliłbyś użytkownikowi zaktualizować swój profil użytkownika? uprawnienia do odczytu / zapisu do tabeli USERS ... Co powstrzymałoby ich przed usuwaniem lub edycją wierszy, które nie są ich… lub nawet czytaniem wierszy, które nie są ich. Jestem prawie pewien, że żaden serwer bazy danych nie ma tego rodzaju drobnoziarnistego ziarna bez użycia procedur przechowywanych lub czegoś
podobnego
@Ellz - nie jestem tego świadomy, ale to poza tym - dlaczego rozmawiasz bezpośrednio ze swoją bazą danych i celowo ignorujesz funkcje bazy danych, aby uczynić to rozsądnym? Czy zrobiłbyś coś ukierunkowanego na profil i aktualizowałbyś w ten sposób?
Wyatt Barnett,
13

Nakłada warstwę abstrakcji między aplikacją a bazą danych. Daje to wiele korzyści, takich jak:

  • Ograniczanie dostępu do bazy danych tylko do części potrzebnych aplikacji. To upraszcza kod aplikacji i zapewnia bezpieczeństwo bazy danych.
  • Wyjaśnia wewnętrzne działanie bazy danych, więc jeśli później zdecydujesz się zmienić schemat, zapytania, a nawet całą bazę danych, link do Twojej aplikacji nie zostanie zerwany, o ile prawidłowo utrzymasz środkową warstwę.
  • Pozwala dodać funkcjonalność poza zakresem DB. Na przykład buforowanie danych, które jest dość stałe. Reguły biznesowe to kolejna część, która powinna być niezależna od DB.
System wyłączony
źródło
1
Kolejną zaletą jest to, że pozwala dodać pamięć podręczną, po stronie klienta lub po stronie serwera (lub obu, do różnych celów).
TMN
@TMN - Dobra uwaga!
System Down
Ok, ale te fakty dotyczą także wszelkiego rodzaju aplikacji internetowych, prawda? Czy wstawienie warstwy (usług sieciowych) wydłuża czas odpowiedzi aplikacji mobilnej, która ma odpowiedzieć szybko?
takildal
1
@yesildal - Tak, nadal są ważne. W rzeczywistości są one ważne dla wszystkich rodzajów aplikacji. Jednak w aplikacjach internetowych nie musisz trzymać się usług internetowych i możesz po prostu izolować te funkcje we własnym zestawie (na przykład). Powodem korzystania z usług internetowych do zdalnych aplikacji (takich jak aplikacje telefoniczne) jest to, że serwer DB nie znajduje się w pobliżu.
System Down
@yesildal - re wydajność: nie tak naprawdę, jeśli masz 1 użytkownika, to tak, wystąpi dodatkowe opóźnienie w zwróceniu wyniku, ale jeśli masz milion użytkowników, sytuacja jest inna, a podzielenie kodu na 2 serwery może spowodować ogólna wydajność szybsza.
gbjbaanb
4

Jeszcze jeden powód, aby nie narażać DB bezpośrednio - transport. Większość relacyjnych baz danych, z którymi rozmawia się za pomocą JDBC, nie jest ogólnie zaprojektowana dla publicznego Internetu. Internet bezprzewodowy jest strasznie zawodnym końcem tego publicznego Internetu. Obsługa wyjątków byłaby koszmarna i prawdopodobnie skończyłbyś pisać odwrotnością warstwy usług internetowych w swojej aplikacji, aby uniknąć utraty transakcji.

Istnieje kilka nowszych rodzajów baz danych, które mówią HTTP i mogą być odpowiednie do tego rodzaju rzeczy. Zazwyczaj oferują także sposoby umieszczania różnego rodzaju kodu aplikacji w bazie danych. Możesz wypatrzeć CouchDb lub RavenDb - oba są dokumentami dbs z funkcjami mapowania / zmniejszania, które działają na Jsonie i http, podobnie jak wiele nowoczesnych usług internetowych.

Wyatt Barnett
źródło