2

昔は、ストアドプロシージャを介してデータベースにアクセスしていました。それらは、データを管理するための「より良い」方法と見なされていました。データはデータベースに保持されており、どの言語/プラットフォームでもJDBC / ODBC/etcを介してデータにアクセスできます。

ただし、近年、Hibernate/DataNucleusなどのランタイムリフレクション/メタデータベースのストレージ取得メカニズムが一般的になっています。最初は、余分な手順が必要であり(リフレクションに費用がかかる)、必要なのが1つのフィールドだけの場合に不要なデータ(オブジェクト全体)を取得する方法が原因で、処理が遅くなるのではないかと心配していました。

J2EEを使用した大規模なデータウェアハウスプロジェクトを計画し始めていますが、ストアドプロシージャとJDO/JPAなどのどちらを使用するかが少しわかりません。最近、私はHibernateを使用していますが、正直なところ、CRUDストアドプロシージャを作成することをお見逃しなく!

それは本質的に次のように要約されます:

ストアドプロシージャ
+サーバー上で最適化できます(ただし、クエリのみ)
-テーブルごとに、追加、削除、更新、getByIdなどの1,000を超えるストアドプロシージャが存在する可能性があります。

JDO
+今後数か月はparameters.add( "@ firstNames"、customer.getFirstName());の作成に費やしません。...-
SPよりも遅くなります(ただし、ほとんどの場合、ページングがサポートされています)

私の状況であなたは何のためにふっくらしますか。この場合、それは非常に重要だと思います。

ありがとう、

ジョン

4

3 に答える 3

2

「JDO - SP よりも遅くなります (ただし、ほとんどがページングをサポートしています)」

この仮定はしばしば誤りです。SP が特に高速である理由はありません。私はいくつかの測定を行いましたが、データベース外のコードよりも高速ではありません。

データ ウェアハウスの特徴は、挿入のみの読み込みと実行時間の長いSELECT...GROUP BY...クエリです。

OLTP トランザクション処理を記述していません。更新/削除トランザクションでの更新異常を防ぐ方法として 3NF を使用していません。

一括挿入を行っているため、SP は一括読み込みユーティリティよりも確実に遅くなります。多くの場合、バルク ローダーはマルチスレッドであり、利用可能なすべての CPU リソースを消費します。SP は DB の一部であり、限られた DB リソースのみを共有できます。

あなたは主に をやっているのでSELECT GROUP BY、ここでも SP はあまり役に立ちません。SELECT ステートメントは、プロシージャでラップされてもメリットがありません。

それらは必要ありません。彼らは役に立ちません。

一括読み込みとクエリを簡単にベンチマークして、SP が役に立たないことを実証できます。

于 2010-01-27T13:11:06.130 に答える
1

Rod Johnson は、「J2EE Design and Development」の中で、ORM/StoredProcedure について非常に明確な分析を書いています。彼は言った

ストアド プロシージャは、データベースに実装されているか、データベースと大量のデータを交換する Java コードに実装されているかに関係なく、常にデータベースを大量に使用する操作を実行するために J2EE システムでのみ使用する必要があります。

データ ウェアハウスの実装を計画しているので、ストアド プロシージャのアプローチは正しい選択だと思います。

于 2010-01-27T13:10:24.940 に答える
0

メタデータを使用して、データ ウェアハウスへの読み込みに使用するスクリプトを生成することをお勧めします。これにより、専用のロード ツールを使用したり、おそらくストアド プロシージャを使用したりすることで、パフォーマンス上の利点を得ることができます (十分に古いデータベースを使用している場合)。また、少なくとも一部の SQL は手作業でコーディングすることになるでしょう。ジェネリック スクリプトをストアド プロシージャとして実行すると、それらすべてを同じ方法でスケジュールできるため、生成されたコードを書き直して実行を改善するときに、それらの呼び出し方法を変更することを心配する必要がなくなります。

データの取得に関しては、J2EE で構築しているものがレポート ツールである場合は、JDO を使用した方がよい場合があります。私はレポートの側面にあまり詳しくありませんが、エンド ユーザーが事前に予期していなかったカスタム レポートを簡単に作成できるようになるというメリットが 1 つあります。プロセス中にデータベースを停止しないように、できることにはいくつかの制限があります)。

于 2010-01-29T08:37:00.553 に答える