2009-04-12 9 views
0

テーブルあたり約150万行のデータを毎日挿入する必要があるアプリケーションを構築しています。私たちは16のテーブルを持っています。 当日のデータを含む3日間の履歴データを追跡します。挿入時のデータのクエリ:キャッシュを使用できますか?

アプリケーションはC#を使用して実行されます。サーバー側では、市場時間(4.5時間)にデータテーブルを埋めるexeを実行し、5秒ごとに16個のテーブルを更新します。

クライアント側では、最も最近挿入されたデータ(過去5秒間)と今日または過去の可能性のある履歴ポイントを必要とするユーザークエリを取得し、何らかの方法でプロットします。

重大なパフォーマンス上の問題が発生しています。クエリが1秒以上かかる可能性があります。問題は、実行時に挿入される今日のデータでは、今日のデータから何かを欲するたびにデータベースに行くのではなく、キャッシュを利用できるのかどうかです。それはより効率的でしょうか?もしそうなら、どうすればいいのですか? P.S 1日のデータは約300 MBです。十分なRAMがあります

答えて

0

データの取得に使用した日時とともにデータのコピーを保管してください。次回は、新しいデータだけを取得します。これにより、ワイヤを介して送信するデータの量が最小限に抑えられます。

すべてのクエリが1秒までの操作量で実行されている場合、表示される問題はUIがフリーズしている可能性があります。その場合は、UIスレッドで実行しないでください。

Upate(コメントに基づいて):コントロールのイベントハンドラで実行するコードは、UIスレッドで実行されるため、UIがフリーズします。別のスレッドで実行する方法は1つではありませんが、このシナリオではBackGroundWorkerを提案します。最後に提供されたコミュニティの例を見てください。

+0

回答ありがとうございました。クエリ時間は、最適化後0秒です。しかし、私たちは512 VPN接続でクエリを実行しており、UIはフリーズしています。私はあなたが本当にそれを解決するために提案したものを得ていない!もう少し詳しく説明できますか? – mustafabar

+0

@mustafabarはそれに関する更新を追加しました。 – eglasius

関連する問題