2012-02-27 10 views
3

私はストレージ用にSQLデータベースを使用しています。私のWebサイトはC#であり、どちらも同じサーバー上にあります。最高の計算プラットフォームSQLまたはC#

私は、StudentTypeをTestType、MAxMarks、MarksObtainedのようなフィールドを持つDataBaseのテーブルに挿入しました。

私はすべての結果を表示するために、これらのテストで得たすべてのテストタイプとマークのmaxmarksを追加する必要があるので、ワンショットで完全な結果を表示する必要があります。

私の質問は、

1ですが)私は、データベースからテーブル全体をフェッチし、C#クラス内のすべての計算を行うべきでしょうか? または 2)SQLサーバー内でt-SQLを使用してすべての計算を行い、結果を取得する必要がありますか?

上記の2つのシナリオのどちらがサーバーフレンドリーであるか私は、さまざまな同時ログインでデータベースが膨大であるため、サーバーへの負荷はあまりありません。

これは、サーバの負荷の観点から理想的なベストプラクティスであるはずです。

+4

任意のレコードを台無しにしない動作することを確認する必要があり、何のメリットは、2つのプロセス間のすべてのデータを投げるにはありません –

答えて

4

クエリの一部として実行します。この場合、データベースに作業をさせてください。正しく索引付けされているものは、問題ではありません。テーブル全体をフェッチすると、メモリ不足になります。

3

1)データベースからテーブル全体を取得し、すべての計算をC#クラスで行う必要がありますか?または2)私は SQLサーバー内のt-SQLを使用してすべての計算を行い、結果をフェッチする必要がありますか?

Ah - THAT DEPENDS。

物語は結果とどのくらいの大きさですか? 10を計算するために100万行を引き出さなければならない場合、これは良くありません。とにかく100の行を引っ張ってそれらをすべて表示すると、その決定は異なっています。

上記の2つのシナリオのどちらがサーバーフレンドリーなのでしょうか。

サーバーを定義します。より多くのデータベースサーバーフレンドリー、またはより多くのアプリケーションサーバーフレンドリー?

さまざまな同時ログインでデータベースが膨大であるため、サーバーに負担をかけたくありません。

hughと「さまざまな同時ログイン」を定義します。これは1000ギガバイト以上ですが、最近のSQLサーバは10.000の並列ログインには問題ありません。サーバは非常に小さく、ユーザ数は少なくて済みます。

真剣に - それに依存します。 SQLは規模が大きく、コストがかかり(ライセンス供与)難しいため、一般的には不良なレイヤーまたは複雑な計算ですが、代替案が何回かシンプルな計算を行うために何百万行も引き下げているのであれば、それは実現可能です。あなたが提供するよりも、基礎知識についてもっと多くの知識を必要とします。

1

他の人が既に言及したように、すべてはプロジェクトの詳細によって異なります。

また、ケース(例:多くの読み取りが行われますが、頻繁ではない変更)、レポートを事前に計算し、その結果をデータベースに格納することは価値があります。たとえば、学生レポートの結果が1日に1回より頻繁に変更されないとします。すべてのレポートを計算し、データベース(おそらく専用のレポートデータベースでさえ)に格納する夜間(またはそれほどビジーではない他の時間)にバッチジョブを実行します。そのようにしてレポートを取得するのは安価で、オンライントランザクションを妨げることはありません。レポートの計算をよりスマートに行い、結果が実際に変化した場合にのみトリガさせることもできます。

また、データベースではなくC#で複雑な計算を行うことをお勧めします。ポータブルで、より強力で、通常はテストが簡単です。

0

あなたの校正要件は現時点では簡単です(1回のテストにつき1年/学生の合計)。あなたには次のオプションがあります。

溶液#1

このUDF内部データベースUDF(testName,studentName,year);を行いますが、学生の名前、年またはすべての学生、すべての年で 結果を返すelse文場合、スイッチや各種を実行することができます。

PROS:

  • すべての結果ロジックがUDFにemebedされます。プレゼンテーションレベルでの新しいフォーム/要件については の結果をもう一度&と計算する必要はありません。 CONS:テーブルサイズはあなたがユーティリティを作るUDF

溶液#2

内部の多くの複雑な計算を行うことはできません

  • を成長する際に

  • あなたは、SQLのパフォーマンスを監視する必要がありますすべての結果を合計するプレゼンテーションレイヤー上のクラス&はプレゼンテーションレイヤーに配信されます。 PROS: ここでは複雑な計算を簡単に行うことができます。 CONS: は、結果セットが巨大な

  • 溶液#3 であるときは、そのような方法で、トリガーをコーディングする必要がSQLトリガー&

    MaxMarks MarksObtained StudentId Status Year 
    ------------------------------------------------- 
    500  100   1   Failed 2011 
    400  300   1   Passed 2010 
    

    のような別の結果表を作成し、リソースを独り占めすることかもしれませんメインテーブルに成功した行が挿入されるたびに実行されると、これらの結果は自動的に挿入されます。このテーブルの結果を要件に照会するだけで済みます。

    PROS:デバッグするのは難しい :

    • あまり仕事
    • 高速 CONSを必要としていました。 あなたは絶対にトリガが適切に&をしても、同じサーバー上に、後に
    関連する問題