2016-09-28 2 views
-2

データベースからデータを読み込んでファイルに書き込むプログラムを開発したいと思います。 パフォーマンスを向上させるために、私はマルチスレッドを使用したいと思います。データベースからデータを読み取り、マルチスレッドを使用してファイルに書き込む

私は実装する予定ソリューションは、これらの前提に基づいています。

  1. DBMSによって管理される並行性の問題があるためと同様に(データベースから読み取るための複数のスレッドを置く必要はありませんファイルへの書き込み)。データベースからの各読取り要素が同じトランザクションで削除されることを考えると、
  2. モデルproducer-consumerを使用すると、データを読み取るスレッド(メインプログラム)。ファイルにデータを書き込む別のスレッド。
  3. 実装のために、executorフレームワーク、つまりコンシューマスレッドを表すスレッドプール(サイズ= 1)を使用します。

これらの前提条件は良い解決策になりますか? この問題にはマルチスレッドに基づくソリューションが必要ですか?

+0

私はこれがこの質問の書き込み場所ではないと思います。 –

+1

1つのファイルを書き込むことは、ほとんどの場合、シングルスレッドの問題として扱われることをお勧めします。 – erickson

+0

@SamOrozco書き込み場所?理解できませんでした ! –

答えて

1

これはコメントの詳細です:最初の仮定については

:あなたはhttps://dba.stackexchange.com/にデシベルの一部を投稿する必要があります。

単純な検索が返されました。 https://dba.stackexchange.com/questions/2918/about-single-threaded-versus-multithreaded-databases-performance - 読み取り処理が複雑であるか、マルチスレッドがDB接続の必要性を満たすかどうかを確認する必要があります。

また、プログラムは順次読み書きされているようです。私はあなたが同じファイルに同時に複数の書き込みをしない限り、マルチスレッドを必要とするとは思わない。

1

JSR 352仕様に関連するSpringバッチhttp://projects.spring.io/spring-batch/をご覧ください。

このフレームワークがあるので、データベースから読み取るために複数のスレッドを置く必要がない

2

等かなり良いマルチスレッド処理を含むETL関連の操作を管理するためのパターン、データ分割、付属していDBMSによって管理される同時実行の問題

したがって、データベースから読み取っている1つのスレッドが必要です。

これらの前提は適切な解決策になりますか?この問題には、マルチスレッドに基づくソリューションが必要ですか?

あなたの解決策はうまくいくが、他の人に言われているように、パフォーマンスの改善についての質問がある。スレッド化プログラムは、コンピュータ上の複数のプロセッサ(またはコア)ハードウェアを使用できるため、機能します。あなたのケースでは、スレッドがデータベースによってブロックされているか、ファイルシステムによってブロックされている場合は、パフォーマンスの改善が最小限に抑えられます。データを大量に処理していた場合、複数のスレッドでタスクを処理するとうまくいくはずです。

関連する問題