データ ウェアハウジング プロジェクトにおけるストアド プロシージャと JDO の比較
-
23-09-2019 - |
質問
昔は、ストアド プロシージャを使用してデータベースにアクセスしていました。これらはデータ管理の「より良い」方法とみなされていました。データはデータベースに保存され、どの言語/プラットフォームでも JDBC/ODBC などを通じてアクセスできます。
しかし、近年では、Hibernate/DataNucleus などのランタイム リフレクション/メタデータ ベースのストレージ取得メカニズムが普及してきました。当初私たちは、必要なフィールドが 1 つしかないのに、余分な手順が含まれ (リフレクションにはコストがかかる)、不要なデータ (オブジェクト全体) を取得する方法があるため、処理が遅くなるのではないかと心配していました。
J2EE を使用する大規模なデータ ウェアハウス プロジェクトの計画を立て始めていますが、ストアド プロシージャと JDO/JPA などのどちらを使用するか少し迷っています。最近、私は Hibernate を使って作業していますが、正直に言うと、CRUD ストアド プロシージャの作成を欠かしません。
基本的には次のようになります。
ストアドプロシージャ
+ サーバー上で最適化可能 (クエリのみ)
- ストアド プロシージャが 1,000 を超える可能性があります。各テーブルの追加、削除、更新、getById など。
JDO
+ 今後数か月は、parameters.add("@firstNames", customer.getFirstName()); の作成に費やすつもりはありません。...
- SP よりも遅くなります (ただし、ほとんどはページングをサポートしています)
私の状況であなたは何のために太りますか?この場合、それはかなりのことだと思います。
ありがとう、
ジョン
正しい解決策はありません
他のヒント
"JDO - 遅くのSPよりも(ほとんどのサポートページング)だろう"
この仮定は、多くの場合はfalseです。 SPの特に高速であるための理由はありません。私はいくつかの測定を行わなかったし、彼らはデータベースの外部コードよりも速くないです。
Aのデータウェアハウスは、インサートのみの負荷とSELECT...GROUP BY...
クエリを長時間実行することを特徴とします。
あなたはOLTPトランザクション処理を書いていません。あなたは、更新/削除取引に更新異常を防止するための方法として、3NFを使用していない。
あなたは一括挿入をやっているので、SPは間違いなく遅くバルクロード・ユーティリティよりもなります。バルクローダは、多くの場合、マルチスレッドで、利用可能なすべてのCPUリソースを消費します。 SPは、DBの一部でのみ限定DBリソースを共有することができます。
あなたはほとんどSELECT GROUP BY
をやっているので、、SPはどちらか、あまりここでは助けにはなりません。 SELECTステートメントは、手順に包まれているの恩恵を受けていません。
あなたはそれらを必要としません。彼らは役立ちません。
することはでき簡単にベンチマークバルク・ロードとSPのを支援していないことを実証するためのクエリます。
ロッド・ジョンソンは、ORM / StoredProceduresについて非常に明確な分析を書きました。彼は
と言いましたストアドプロシージャは、常にデータベースとのデータのやり取りたくさんいることを彼らはデータベースやJavaコードで実装しているかどうか、頻繁にデータベースを使用する操作を実行するJ2EEシステムで使用する必要があります。
あなたがしている計画は、データウェアハウスを実装するように、私は、ストアドプロシージャのアプローチが正しい選択だと思います。
私は、データウェアハウスにロードするために使用するスクリプトを生成するためのメタデータを使用してお勧めします。 (あなたが十分に古代のデータベースを使用している場合)これは、特殊な負荷ツールを使用することから、おそらくストアドプロシージャからのパフォーマンスの利点を得ることができます。また、あなたはおそらく、少なくともいくつかのSQLのコーディングの手をアップしてしまいます。あなたの一般的なスクリプトが保存されprocsのように行わ持つことは、あなたが同じ方法でそれらのすべてをスケジュールし、あなたはそれがより良い実行するためにいくつかの生成されたコードを書き換える際に、どのように呼び出されるか変更を心配する必要はありませできるようになります。
どのようなJ2EEであなたがしている建物はレポートツールであれば、は、データを取得するためとして、あなたはJDOを使ったほうが良いかもしれません。私は物事の報告側とひどく慣れていないんですが、私が見ることができる1つの利点は、あなたがまだ持っているんだが、エンドユーザーが(事前に予想していなかったことをカスタムレポートを作成できるようにすることが容易になるということです彼らはプロセスでデータベースをテイクダウンしないように何ができるかについて、いくつかの制限)。