2012-03-14 8 views
8

私は約10 GBの巨大なファイルを持っています。私はソートやフィルターなどの操作をJavaのファイルに施さなければなりません。各操作は並行して行うことができます。Javaの膨大なファイルを処理しています

10スレッドを開始してファイルを並列に読み込むとよいですか?各スレッドは1 GBのファイルを読み込みます。 特大のファイルを使用して問題を解決し、できるだけ早く処理する方法はありますか?このようなシナリオにはNIOは適していますか?

現在、私は連続して操作していますが、そのようなファイルを処理するのに約20分かかります。

おかげで、

+0

複数のマシンにアクセスできる場合は、Map/Reduceを見てください。 – Jochen

答えて

11

は、それが10個のスレッドを開始し、並行して、ファイルを読むためには良いですか?

ほぼ確実ではありませんが、 SSD(シーク時間が実質的にない場合)の場合、はおそらくです。それが従来のディスクの場合、間違いなく。

複数のスレッドを使用できないというわけではありません。スレッドを1つ作成して、ファイルを読み込み、処理可能なチャンクにデータを取得する最も初期のタスクのみを実行する可能性があります。次に、プロデューサ/コンシューマキューを使用して、複数のスレッドにプロセスのデータを許可させます。

"sort、filter、etc"(これは非常に曖昧です)以外のことはわかっていませんが、プロセスが最初にどのように並列化可能であるかはわかりませんが、IOを1つのファイルで並列に実行しようとすると、 おそらくヘルプがありません。

1

コードをプロファイリングして、ボトルネックがどこにあるかを確認してください。 1つのスレッドでファイル全体(またはできるだけ多くのもの)を読み込もうとしましたが、それを処理するために10個のスレッドに渡しましたか? File I/Oがボトルネックである(これは妥当と思われます)場合、これにより全体の実行時間が改善されます。

関連する問題