先日、SpringBatchで複数ファイルをマルチスレッドでDBに突っ込むってエントリを書きましたが、
そういえば、時間の計測してなかったと思って、チョロっとやってみました。
# クアッドコアのCPUとかだとこういうのグワっと差分が出てきそうですが、
# 会社の開発用UbuntuマシンはPentium Dってヤツなので微妙っちゃ微妙ですが。。
■テストデータ準備
テストデータ準備用のプログラム
#!/usr/bin/ruby start = ARGV[0].to_i file_name = ARGV[1] loop = ARGV[2].to_i file = File.open(file_name, 'w') loop.times{|i| source=("a".."z").to_a + ("A".."Z").to_a + (0..9).to_a # ランダム文字列用 key="" 5.times{key+=source[rand(source.size)].to_s} num = start + i file.puts num.to_s + "," + key } file.close
1. Multi用(10万行のファイル5つ)
./input.rb 100000 hage1.csv 100000
./input.rb 200000 hage2.csv 100000
./input.rb 300000 hage3.csv 100000
./input.rb 400000 hage4.csv 100000
./input.rb 500000 hage5.csv 100000
2. シングル用(50万行のファイル1つ)
./input.rb 500000 hage.csv 500000
■ 処理
reader・・・ファイル読み込み
processor・・・CSVの2要素目に”value”という文字列を追加してDBの3カラム目をセット
writer・・・DBにINSERT(commit-interval=”10″)
・Singleは50万行のCSVファイル(hage.csv)
・Multiは5スレッドそれぞれで10万行のCSVファイル(hage1.csv〜hage5.csv)
■ 結果
★ Multi => 約88秒
2010-11-24 16:53:09,189 INFO main [org.springframework.context.support.ClassPathXmlApplicationContext] - <Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3e86d0: startup date [Wed Nov 24 16:53:09 JST 2010]; root of context hierarchy> 〜略〜 2010-11-24 16:54:37,925 INFO main [org.springframework.batch.core.launch.support.SimpleJobLauncher] - <Job: [FlowJob: [name=hageMultiJob]] completed with the following parameters: [{}] and the following status: [COMPLETED]>
★ Single => 約140秒
2010-11-24 17:00:42,631 INFO [org.springframework.context.support.ClassPathXmlApplicationContext] - <Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3e86d0: startup date [Wed Nov 24 17:00:42 JST 2010]; root of context hierarchy> 〜略〜 2010-11-24 17:03:01,594 INFO [org.springframework.batch.core.launch.support.SimpleJobLauncher] - <Job: [FlowJob: [name=hageJob]] completed with the following parameters: [{}] and the following status: [COMPLETED]>
=====
データ投入先のDBも同じマシン内なのでCPUネックになってしまって
そこまで劇的な差を出すことは出来ませんでしたが、
多重化して1.6倍くらいの性能が出てるので、計測したのは無駄ではなかったかなと。。
コメント