増加のパフォーマンス「アプリケーション層にビジネスロジックを動かす」ことはできますか?

StackOverflow https://stackoverflow.com/questions/1118193

質問

私の現在のプロジェクトでは、ビジネスロジックは、ストアドプロシージャ(そのうちの1000 +)に実装されており、今、彼らはビジネスが成長しているとして、それをスケールアップしたいと思います。建築家は、パフォーマンスとスケーラビリティを向上するために、アプリケーション層(.NET)にビジネスロジックを移動することにしました。しかし、彼らは何かを書き換え/再設計されていません。要するにSPから発射されているのと同じSQLクエリは、ADO.Netを使用して.NET機能から発射されます。どのようにこれはどんなパフォーマンスをもたらすことができますか?

私の理解の最高に、私たちはDBの独立性を必要とするとき、アプリケーション層にビジネスロジックを移動する必要があるか、より良い階層または一部を横断するように(RDBMSエンジンよりもOOP言語で実装することができますいくつかのビジネスロジックがあります画像処理など。)。実装するための複雑なビジネスロジックが存在しない場合例残りでは、私は少なくとも、アプリケーション層とDB間のネットワーク遅延がこのように回避することができDB自体にビジネスロジックを維持する方が良いと信じています。

私はあなたの意見をお聞かせください。私は少し躊躇していくつかのアーキテクチャ上の意思決定を見ている開発者です、件名に自分の無知を許します。

役に立ちましたか?

解決

ビジネスロジックは、SQL文の中である場合は、

は、データベースが以前のように同じくらいの仕事をやっているだろう、とあなたはより良いパフォーマンスを得ることはありません。 (ようeffectivilyストアドプロシージャを使用したときのように、クエリプランをキャッシュすることができない場合には、より多くの仕事かもしれない)。

あなたは、アプリケーションサーバ上の例のキャッシュデータのために、アプリケーション層にいくつかの作業を移動することができます必要がある、より良いパフォーマンスを取得し、データベースを押すことなく、ルックアップや妥当性チェックを行うには?

他のヒント

このようなアーキテクチャの引数は、多くの場合、単独でのパフォーマンスを考慮し、多くの取引オフを考慮する必要があり、または、そのような応答時間などのパフォーマンスのideed考慮唯一の一態様は、より大きな絵を欠場する傾向がある。

データベース層にロジックを実行し、バックapplciation層にデータを出荷し、そこにそれを処理する間にオフ

があり、明らかにいくつかのトレード。処理費用対データ船のコスト。あなたは、ビジネスロジックのコストと複雑さを示しているとして重要な要素となります、出荷されるデータのサイズは、別のになります。

DB層は、ビジーなっている場合は、

これは、別の層に処理をオフロードする個々の応答時間が増加した場合であってもより大きな全体のスループットを可能にすることができることが、考えられます。私たちは、その後、いくつかの余分な負荷に対処するために、アプリケーション層をスケールすることができます。あなたは今、パフォーマンスが向上し(大きい全体的なスループット)または(応答時間がsoem増)悪化していると言うでしょう。

これでアプリ層は面白いキャッシュ戦略を実装する可能性があるかどうかを検討します。おそらく、我々は非常に大きなパフォーマンスの勝利を得る! - いくつかの要求のために、すべてのDBへの負荷がかからない。

私はこれらの決定は、建築の教義を使用して正当化すべきではないと思います。データは大いにより理にかなってます。

「すべてのビジネスロジックをストアドプロシージャに属している」または「すべては中間層であるべき」などの

ステートメントは、その知識を、それぞれ、データベースまたはオブジェクトに制限されている人々によって作られる傾向にあります。より良いあなたが判断したときに両方の組み合わせ、および測定に基づいて、それをすることができません。

あなたのいずれかの手順は、大量のデータを噛み砕くと結果の一握りを返している場合は、

たとえば、それはデータベースに残るべきと言うの引数があります。別のラウンドトリップでデータベースを更新し、その後、中間層の上にメモリに数百万行を持って来るそれらをクランチ、そして中にほとんど意味があります。

別の考慮事項は、データベースは、アプリケーション間で共有されているか否かです。もしそうなら、それを使用することができます。

、ロジックはので、すべてのデータベースに滞在する必要があります

中間層は、行ったり来たりする傾向があるが、データは永久に残っています。

私は自分自身のオブジェクトの男だけど、私は軽く踏むでしょう。

これは複雑な問題です。私は黒と白のステートメントは、すべてのケースで動作することはないと思う。

他の人がすでに述べているだけでなく、それは多くの要因に依存します。しかし、あなたから、建築家がアプリケーション内での動的SQLをDB内部からストアドプロシージャを動かす提案されていると思われる質問。それは私にとって非常に疑わしいですね。 SQLはSQLで良いだろうデータレコードの大量のマッサージを必要と集合指向言語とビジネス・ロジックです。複雑な検索およびレポートタイプの機能を考えてみてください。一方のラインアイテムにビジネスルールの検証がはるかに優れたプログラミング言語で行われている対応して編集します。アプリ層で遅い変化データのキャッシングは別の利点です。あなたはすべてのデータへのゲートウェイとして機能する中間層のサービスを捧げてきた場合、これはさらに良いです。データは、異なるアプリケーション間で直接共有されている場合、ストアドプロシージャは、良いアイデアであってもよいです。 また、組織内のプログラミングの才能対SQLの才能の可用性/経験を考慮しなければなりません。 この質問への一般的な答えは本当にありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top