2011-07-15 10 views
2

私はスポーツクラブを自動化するためにC#とSQL Server 2008を使ってアプリを開発しています。 私はいくつかのパラメータを渡した後にデータを返すSQL Serverにストアドプロシージャを作成し、グループ化のようなレポートの結果、返されるフィールドの数は送信されたパラメータに応じて変更されます。 私の質問は、SQL Serverでグループ化を行い、最後の結果を返して、それをC#レポートで表示するか、グループ化や並べ替えなしでデータを取得し、C#でレポートを作成する方が良いです。グループ化するサーバーまたはクライアントのデータでグループ化する方が良いですか?

ありがとうございます。

+0

私は両方を実装し、パフォーマンス結果を比較します。実際には、データとクライアントが単純に要求するのと比較して、サーバーがグループ化を生成するのにかかる時間によって異なります。 –

+0

なぜ私はトウの回答を受け入れることができないのですか?私は多くの人がそれをするのを見た 私はボットの答えを意味するエリックとジャスティンは正しいと助けて 私は何ができますか? – AlaaL

答えて

4

です。 LINQがオプション(エンティティフレームワークを使用している、またはストアドプロシージャを使用していないことを意味する)であれば、サーバー上でグループ化を実行しながらC#コードのgroup byをプログラムによって変更できます。

group byを動的に変更できるLINQ/Entityモデルを使用できない場合は、アプリケーションレベルでグループ化を実行して、10億の異なるクエリオプションを使用せずにユーザーパラメータに基づいてデータをグループ化できます。

それ以外の場合は、帯域幅の消費を抑え、転送時間が高速で、一般的にはSQL(および一般的なデータベース)のグループ化がC#で行う処理よりも高速であるため、サーバーで実行します。

+0

ジャスティンが本当に助けてくれてありがとう。 – AlaaL

+0

エンティティフレームワークとLINQを使用していますが、レポートには多くのオプションがあり、4つ以上のテーブルからのクエリデータです エンティティフレームワークとLINQではこれが簡単ではないと思いますか? – AlaaL

+0

すべてのオプションを処理するには、おそらくC#コード内にいくつかの 'if'条件を使用する必要があります。つまり、' if'ごとに少しずつクエリを複製する必要があるかもしれません。可能な限りクライアントに条件を集中させたい。 –

3

ありますいくつかの競合要因:

  • それは、ネットワーク経由でデータを渡すために、比較的遅いです(比較

    は、ここで関心のリンクですそれが格納されているサーバ上で処理すること)。また、SQLサーバーからあまりにも多くのデータを送信すると、ネットワークインターフェイスが飽和する危険性があります。 SQLは(とりわけ)データの集約/グループ化がうまくいくように設計されています。これは、SQL Serverでのグループ化を優先します。

  • SQLサーバーは、スケールアウトするのが最も難しいレイヤーです。これは、そのサーバーでの処理を最小限に抑え、集中的な処理を他のアプリケーション層(Webサーバー、アプリケーションサーバー、クライアントアプリケーション)に委託することを優先します。別のアプローチは、規模の拡大を図るデータレイヤーを使用することです(NoSQLソリューション)。

スポーツクラブのアプリケーションでは、SQLサーバーに負荷がかからないと強く思っています。その場合、私はSQLサーバー上でグループ化を行います。

+0

エリックは本当に助けてくれました。 – AlaaL

関連する問題