0

使用している Web サイトに応じて、米国またはカナダのデータベースを使用する ASP.NET MVC 4 アプリケーションがあります。

このプログラムを使用すると、さまざまなフィルターでジョブ データをフィルター処理でき、基準は多数のテーブル結合を含む SQL クエリに変換されます。データはフィルタリングされ、グループ化/集計されます。

ただし、現在、新しい要件があります。カナダのサーバーと米国のサーバーの両方で、データに対してクエリを実行し、グループ化と集計 (平均給与) を実行します。

現在、ルックアップ テーブルは両方のデータベース サーバーで複製されています。

私が考えていたアプローチは次のとおりです。

米国のサーバーでクエリを実行し、カナダのサーバーで再度クエリを実行してから、メモリ内のデータをマージします。

使用例の 1 つを次に示します。企業を平均給与でランク付けします。ロジックとしては、ジョブ テーブルをフィルター処理してクエリを実行し、結果を会社と平均給与別にグループ化するだけです。

これを行う他の方法はありますか?レポート ビュー テーブルに夜間ジョブを入力し、そのレポート テーブルに対してクエリを実行することを考えていました。正直なところ、クエリ自体は最初からそれほど高速ではありません。実行中、カナダのデータベースに対して再度クエリを実行すると、サイトの速度が大幅に低下するようです。

何か案は?

4

1 に答える 1

1

ここにはかなりの数の変数があります。データが多すぎない場合は、データベースができる限り多くの作業 (つまり、グループ化、平均化など) を実行できる限り、各 DB でクエリを実行してマージしても問題ありません。

他のオプションには、データベースをリンクして単一のクエリを実行することが含まれますが、これにはいくつかの欠点があります。

  • データベースをリンクする必要がある
  • リンクされたデータベースに関連付けられたセキュリティ
  • 1 つのクエリを実行するには、両方のデータベースがオンラインである必要がありますが、2 つのクエリを使用すると、この問題を回避できる可能性が高くなります。

スケジュール済みの事前構築されたテーブルにはいくつかの利点と欠点がありますが、おそらくデータベースが 2 つあるはずのデータベースが 2 つあるという根本的な問題にはおそらく関係ありません (おそらくそうでない場合もあります)。

クエリが非常に遅く、何度も呼び出される場合、スナップショットの時点でのデータが関連性があり、ビジネス ニーズに役立つ場合は、1 回のスナップショットでリソースを節約できます。

ハイブリッドは、DB が実行中の平均を作成できる「インデックス付きビュー」を作成することです。これは、クエリが高速で、最新の状態を維持するのに比較的目立たないようにする必要があります。

その一部が役立つことを願っています。

于 2013-04-20T07:29:38.200 に答える