Androidアプリのリレーショナルデータベースに直接アクセスする代わりにWebサービスを使用する理由


19

リモートロケーションの中央データベースに効率的な方法でアクセスする方法をWebで検索し、データベースへの直接アクセス(JDBCなど)の代わりにWebサービスを使用するよう提案しました。 。

回答:


25

Webサービスレイヤーを追加すると、必要なCPUパワーと処理中に使用される帯域幅の両方の点で、クライアントをより軽量にする機会が与えられます。両方の要素はエンドユーザーにとって非常に重要です:

  • より少ないCPUを使用すると、バッテリーの寿命が長くなり、
  • より少ない帯域幅を使用すると、従量制プランのユーザーに対する毎月の支払いが削減されます

Webアプリケーションレイヤーを導入することにより、処理の大部分を、ハンドヘルドモバイルの低電力、低帯域幅、低メモリのクライアントから、それよりも多くのメモリを持つプラグイン、高電力、高帯域幅のサーバーに移動します。ニーズ-処理と通信にかかる費用がクライアントにかかる費用の数分の1である環境。

しかし、ちょっと待ってください。システムを分割することで、ビジネスルール、データベースの構造、およびそこにあるもののバージョンをさらに制御できるようになります。モバイルクライアントをデータベースに直接接続すると、デザインはそのデータベース構造と「結婚」します。ほとんどすべての変更は、クライアントの下位互換性を破壊し、アプリのアップグレードをためらう可能性があります。

対照的に、間にWebサービスを追加すると、モバイルクライアントへのインターフェイスをより管理しやすい方法で進化させることができます。たとえば、古いインターフェイスを所定の位置に保ち、それと「並列」に動作する新しいインターフェイスを追加してから、完全に単一のクライアントを壊さずにデータベースを再構築します。

Webサービスの設計中にいくつかの非常に基本的な設計原則に従うと、適切に配置された成熟したサーバー側インフラストラクチャを再利用することで大きなメリットを得ることができます。たとえば、キャッシュサービスとプロキシサービスを無料で取得できます。

最後に、これにより、自分でサービスを提供できなかったプラットフォームにアプリケーションを公開し、最終的に会社の利益につながる他の開発者への扉が開かれます。


1
「必要なCPUパワーと処理中に使用される帯域幅の両方の点」が私が探していたキーポイント
でした。ありがとう-yesildal

4
また、アプリがデータベースと直接通信する場合、データベース内のすべてのテーブルを削除する誰かから離れた逆コンパイラーになります。Webアプリを使用すると、よりきめ細かな制御を使用して、そのようなことを止めることができます
-Earlz

1
@Earlz:私がwebappに対して喜んでやるということではありませんが、ほとんどのデータベースサーバーには、かなりしっかりしたきめの細かい権限があります。ドロップテーブル権限を持つWebユーザーには言い訳はできません。
ワイアットバーネット

1
@WyattBarnett OK ...ストアドプロシージャなどがなければ、どのようにしてユーザーがユーザープロファイルを更新できるようにしますか?USERSテーブルへの読み取り/書き込み権限...それらが自分のものではない行を削除または編集するのを阻止したり、自分のものではない行を読み取ったりすることさえできません。ストアドプロシージャなどを使用しないと、この種のきめ細かいデータベースサーバーはない
はずです

@Earlz-私が知っていることではありませんが、それはポイントです-なぜあなたはあなたのデータベースに直接話し、その正気を保つためにデータベース機能を意図的に無視するのですか?そして、あなたはプロファイル中心の何かをし、このように重い更新をしますか?
ワイアットバーネット

13

アプリとDBの間に抽象化レイヤーを配置します。これにより、次のような多くの利点が得られます。

  • DBへのアクセスを、アプリが必要とする部分のみに制限します。これにより、アプリのコードが簡素化され、DBのセキュリティが確保されます。
  • DBの内部動作を抽象化するため、後でスキーマ、クエリ、またはデータベース全体を変更することにした場合でも、中間層を正しく維持する限り、アプリへのリンクは壊れません。
  • DBの範囲外の機能を追加できます。たとえば、ほぼ一定のデータをキャッシュします。ビジネス・ルールは、別の一部である必要があります離れてDBからなります。

1
もう1つの利点は、クライアント側またはサーバー側(または異なる目的のために両方)にキャッシュを追加できることです。
TMN

@TMN-良い点!
システムダウン

わかりましたが、これらの事実はどんな種類のWebアプリケーションにも有効ですよね?
-yesildal

1
@yesildal-はい、まだ有効です。実際、これらはすべてのタイプのアプリケーションに有効です。ただし、Webアプリでは、Webサービスの使用に固執する必要はなく、これらの機能を(たとえば)独自のアセンブリに分離するだけです。リモートアプリ(電話アプリなど)にWebサービスを使用する理由は、DBサーバーが近くにないためです。
システムダウン

@yesildal-再パフォーマンス:実際にはそうではありません。1人のユーザーがいる場合、はい、結果を返すのに余分な遅延があります。全体的なパフォーマンスが向上します。
gbjbaanb

4

DBを直接公開しないもう1つの理由-トランスポート。JDBCと対話する種類のほとんどのリレーショナルデータベースは、一般にパブリックインターネット用に設計されていません。ワイヤレスインターネットは、このパブリックインターネットの恐ろしく信頼性の低い目的です。例外処理は悪夢であり、おそらくトランザクションの損失を避けるために、アプリ内でWebサービスレイヤーの逆を書くことになります。

HTTPを使用する新しい種類のデータベースがいくつかあり、この種のデータベースに適している場合があります。また、データベースにある種のアプリケーションコードを配置する方法を特徴とする傾向があります。CouchDbまたはRavenDbに注目してください。どちらも、多くの最新のWebサービスと同様に、jsonおよびhttpで機能するmap / reduce機能を備えたドキュメントデータベースです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.