2012-02-22 13 views
2

私の職場では、常に "アプリケーションサービス層のすべてを実行する"と "DBプロシージャのすべてを実行する"とがあります。アプリケーション - > DBコールはどれくらいの費用がかかりますか? (つまり、Java JDBC - > Oracle)?

私が得たのは、アプリケーションサーバーとDB通信が頻繁に通信することはかなり高価な操作です。私の質問は - どれくらいの費用がかかりますか?

私はこの例を持っているとしましょう。私はJavaアプリケーションのユーザーのリストを持っています。それらのそれぞれに特定の属性をバインドする必要があります。 20人のユーザーと20個の属性が格納されているとします。 1コールを作成するのではなく、パラメータ(employee_id、attribute_value)を使用してOracleプロシージャを20回コールし、すべてのemployee_idsと一致するattribute_valuesを一度に送信するのはどれだけコストがかかりますか?

編集:

[OK]を、多分私は明らかに私の場合を述べるなかった - 私は少しそれを「dumbify」よ:)

それは、n個のOracleへの呼び出しを行うためにどのようにはるかに高価です1つのOracleプロシージャを呼び出すのではなく、1つのinsertを実行するプロシージャです(n insertは基本的に1回insert n回ループします)。 1回ではなくn回の呼び出しでそれを行う理由は、初心者のために、単純なデータ型を入力オブジェクト(つまりinteger、varchar2など)を使ってn個のプロシージャ呼び出しを考えるループをJavaで記述する方が簡単ですJavaからOracleに配列を渡す方法について説明します。

+5

ベンチマークしたか測定しましたか?これはおそらく、特定のシステムの多くに依存します(たとえば、アプリケーションと同じマシン上のデータベースサーバー)。 –

+0

Uhm、no。私たちはHTTP応答の持続時間を測定していますが、それ以外の統計はありません。 また、Oracle JDBCドライバを使用してTomcat 5.5上でSpringベースのJava Webアプリケーションを実行し、Oracle 10 DBに接続しています。残念なことに、私はアプリとDBが別々のマシンにあるという事実以外に、多くの助けになる他の技術的事柄についてあまり知らない。 – eagerMoose

答えて

3

データを取得するのにどれだけ費用がかかるかをケースバイケースで判断する必要があります。あなたが遵守しているSLAに依存します。 この例では、すべてのユーザーが同時にアプリケーションにログインするわけではなく、「属性」の値がユーザーごとに異なる場合は、すべてを一度に取得する必要はありません。 上記の属性の一部が静的なデータを表す場合は、それらをアプリケーションにキャッシュし、キャッシュされたデータを使用することは理にかなっています。

実際には、ケースバイケースで決定する必要があります。データを取得するのに費用がかかるからといって、一度にすべてを取得するわけではありません。

データソースと接続プール(ほとんどすべてのAPSが最近使用しています)を使用していて、プリペアドステートメントを使用している場合は、手順でBULK COLLECTステートメントを使用するか、 hibernate(最適なフェッチサイズを使用する)を使用すると、非常に高価ではありません。 リレーションは確かに線形ではありません。つまり、1回の呼び出しで20回の費用がかかります。

関連する問題