2011-01-20 14 views
2

私はSQL Server 2008データベースを持っており、Linq to Entitiesクラスのデータベース操作用にC#4.0を使用しています。C#+ SQL Server - 新しい行をメモリに読み込むための最速/最も効率的な方法

DateTime列に索引付けされる表があります。この値の値は、その行の挿入時間です。いくつかの新しい行が追加され(〜20)、それらを効果的にメモリにプルしてGUIに表示できるようにする必要があります。簡単にするために、私はWPF経由で表示されるリストに最新の50行を表示する必要があると言うことができます。

私はデータベースに負荷ポーリングが発生し、新しい結果を処理して低速のコンシューマになる時間がかかることに懸念しています。私はアプローチに関するいくつかの助言を期待していました。私が検討しているのは、

  1. 世論調査タイトループ内のデータベース(クエリごと〜1つの結果)
  2. ポーリングデータベース毎秒(クエリごと〜20件の結果)
  3. を挿入するためのデータベース・トリガーを作成し、イベントにそれを結びますC#(SqlDependency

また、アクセスするためのオプションもあります。

  1. LINQのツーエンティティ表を選択
  2. 生SQLクエリ
  3. LINQのツーエンティティあなたが長所と短所にいくつかの光を当てるか、別の方法を提案することができれば手順

ストアド私はそれを聞くのが大好きです。

テーブルに行を追加するプロセスは私の管理下にありません。変更または追加しない行だけを読みたいと思っています。最も重要なことは、SQL Serverを過負荷にすることなく、GUIを最新かつ応答性の高い状態に保ち、できるだけ小さなメモリを使用することです...

ありがとうございました!

答えて

0

ここでは少し遅れていますが、SQL Server 2008のエディションにこの機能がある場合は、Change Data Captureと呼ばれる機能があります。基本的には、データベースとキャプチャする必要がある特定のテーブルの両方でこの機能を有効にする必要があります。組み込みチェンジ・データ・キャプチャ・プロセスでは、トランザクション・ログを調べて、表に加えられた変更を判別し、事前定義された表構造に記録します。この表を照会したり、表の結果を友好的なものに(おそらくは別のサーバー上に)置くことができます。私たちは特定のビジネス要件にこの機能を使用する初期段階にあり、これまでのところかなりうまくいっているようです。

この機能があなたのニーズを満たすかどうかをテストする必要がありますが、トリガーが不要でデータキャプチャがデータベーステーブル自体を結び付けないためメンテナンスに役立つ場合があります。

+0

すべての回答が良かったが、この機能は私にはわからず、私のソリューションで使用されてしまった。ありがとう! – CityView

0

データベースをポーリングするのではなく、SQL Server Serviceブローカーを使用してそこからの読み取りを実行し、新しい行をプッシュすることもできます。次に、テーブルから選択することができます。

私がここで見る最も重要なことは、新しい行(タイムスタンプ?)を識別する方法にインデックスを付けることです。このようにすると、毎回テーブルにクエリを出すのではなく、インデックスからトップエントリを選択します。

テスト、テスト、テスト!あなたが試してみたい戦術について、あなたのパフォーマンスをベンチマークする。解決すべき最大の課題は、データがどのように格納されるか、対処する必要があるロックと一貫性の問題です。

0

テーブルが1秒間に20行ずつ絶えず更新されている場合は、毎秒または数秒ごとにプルする方が良い方法はありません。挿入された最後の行を取得できる効率的な方法(索引またはクラスタード索引を意味する)を持っている限り、このメソッドは最小限のリソースを消費します。

更新が1秒間に20回更新されますが、その間にかなりの休止時間(分)がある場合は、SqlDependencyを使用することができます(ただし、トリガーとはまったく関係ありません)。The Mysterious Notificationそれが実際にどのように機能するのか)。LINQとSqlDependencyを混在させることができます。linq2cacheを参照してください。

0

にはがありますか?新しいデータの通知を受けるにはどうすればよいですか?

サービスバスからプッシュ通知を使用する方がよい場合があります(例:NServiceBus)。

通知(イベント)を使用することは、ほとんどの場合、ポーリングを使用するよりも優れたソリューションです。

関連する問題