3

fastcsv を使用してログ ファイル (.CSV) を読み取り、その内容をデータベースに保存する必要があります (各セル値はレコードです)。問題は、毎日読み取る必要がある約 20 ~ 25 個のログ ファイルがあり、それらのログ ファイルが非常に大きいことです (各 CSV ファイルは 7Mb を超えます)。ユーザーが長時間待つ必要がないように読み取りプロセスをフォークしましたが、そのサイズの20〜25ファイルの読み取りには時間がかかります(2時間以上)。今、私は各ファイルの読み取りをフォークしたいと思っています。つまり、作成される子プロセスが約 20 ~ 25 になります。私の質問は、それを実行できますか? はいの場合、パフォーマンスに影響し、fastercsv はこれを処理できますか? 元:

for report in @reports
  pid = fork {
   .
   .
   .
   }
  Process.dispatch(pid)
end

PS: 私は Rails 3.0.7 を使用しています。これは、Amazon の大きなインスタンス (7.5 GB のメモリ、4 つの EC2 コンピューティング ユニット (それぞれ 2 つの EC2 コンピューティング ユニットを備えた 2 つの仮想コア))、850 GB のローカル インスタンスで実行されているサーバーで発生する予定です。インスタンス ストレージ、64 ビット プラットフォーム)

4

1 に答える 1

1

ストレージがすべてローカルである場合(そして、クラウドにいる場合に本当に言えるかどうかはわかりませんが)、操作の最も遅い部分がディスクIになるため、フォークによってスピードアップが得られる可能性は低くなります。 / O(データに対して本格的な計算を行っている場合を除く)。いくつかのプロセスを介してディスクをヒットしても、一度にスピードアップすることはできませんが、ディスクに大きなキャッシュがある場合は、少し役立つかもしれません。

また、7MBのCSVデータはそれほど多くはありません。データをより速く挿入する方法を見つけた場合は、より高速化できる可能性があります。一部のデータベースは、フォーマットされたデータを直接ロードできるバルクロード機能を提供します。または、各行をINSERTに変換して、データベースに直接ファイルすることもできます。現時点ではどのように行っているのかわかりませんので、これらは単なる推測です。

もちろん、そうは言っても、確実に試す唯一の方法はそれを試すことです!

于 2012-05-17T20:21:47.537 に答える