2011-01-07 15 views
0

私はデータベースを持っています。私のデータベースが1.000.000.000のレコードを持っているか、100GBのデータがあるとします。私はプログラムを書いています。スレッドとパターンの使用

プログラムは基本的に10レコードを取るためにデータベースにクエリを送信し、このレコードを画面に表示します。ユーザーは、表示されているレコードを変更するために、一時停止のスクロールバーを使用します。たとえば、ユーザーがスクロールダウンしたプログラムが2から11の間のレコードを表示する場合、ユーザーはスクロールダウンを続けると、レコードは3から12,4および13のように表示され続けます。

どうすればそのようなプログラムでスレッドを使用できますか?誰でもそれについての一般的な考えを与えることができます。もし私がパターンを使用したいのであれば、どのパターンを使うことができますか?なぜですか?

注:スクロールバーではなく、上下に2つのボタンを使用することもできます。

+0

まず、Dbからデータを取得する方法が心配です。今はスレッドを忘れてしまいます。 –

+0

私はこれを行う前にコード化しました。しかし、私は私の問題を言ったように私はどのようにスレッドとスレッドを扱うパターンを使用します。 –

+1

レコード数が多い(10^9が多い)場合は、スクロールバーとレコードの間の解像度マッピングが非常に低い、つまりスクロールバーに1000pxがあるため、スクロールバーが使用されているかどうか疑問に思う必要があります。 10^9/10^3 = 10^6レコードを表します。あなたがスクロールバーを動かすたびに、それは最低100万レコードを飛び越します。あなたがページボタンを持っているならば、ユーザーは下ボタンに10回〜8回クリックしなければなりません。それはしばらく時間がかかるでしょう:) –

答えて

1

典型的なパターンは、1つのスレッドがUIを処理することです。マウス、ウィンドウ、描画など

実際のDB入出力を作成したワーカースレッドが作成されます。そのスレッドはデータベースからの応答を収集します。&これをバッファに配置するか(または小刻みに)UIスレッドに送ります。これにより、入力されたとおりに表示されます。あるいは、UIスレッドは、ユーザーがUI を使用して作業しているので、作業者が必要なデータのすべてを持っていなくてもすぐに対応できるようにする必要があります。

いずれにしても、作業が実行されている間はUIを応答し続けるのが典型的なパターンです。

DBレベル自体では、レコード内の検索の実行を、独立したスレッドまたはファイバー上で実行される複数の並列タスクに分割して、プログラムから要求された実際の検索を行う方法はたくさんあります。

+0

あなたの答えをありがとう..それは良いアイデアのようです..私はあなたが言ったパターンについてのより多くの情報を見つけようとします..私は "ワーカーパターン"としてそれを検索する必要がありますか? –

+0

申し訳ありませんが、私はこのパターンの正式な名前は認識していません。それは、GUIスタイルのアプリケーションでよく発生するものです。私は、例えば、UIがステータスの更新を表示している間、ユーザーに完全に応答している(そして取り消すことができる)アンロードされている間、実際のインストールを行うワーカースレッドを持つインストーラを書いています。同様に、I/O作業をGUIとは別のスレッドで行うシリアル(COMポート&パラレルポート)送受信ソフトウェアを作成しました。 Win32プログラミングでは非常に簡単なパターンです(他のOS環境でも同様です)。 – Mordachai

関連する問題