RAMディスク上のSQLite3でAR.createを試す
@littlestarlingさんがtwitterで
「rake db:fixtures:load からかえってこない…2.5MB程度のcsvなのになんで?」
と呟いていたので。
RAMディスク上のSQLite3と、HDD上のSQLite3とでRailsのAR.createを試し、ベンチマークを取ってみました。(話の流れ上、トランザクションのあり/なしも同時に試した)
RAMディスクを準備
Mac OSX Leopardの場合
「RamdiskOnMenubar (ROM)」を使ってRAMディスクを作成可能です。
- DMGファイルをダウンロードします。
- 展開されたイメージ内の「RamDisk.app」をアプリケーションフォルダに移動します。
- 「RamDisk.app」を起動し、任意のVolume sizeを設定後「Mount」ボタンをクリックします。
- デスクトップにRamDiskがマウントされます。
Windows 2000/xpの場合
「ERAM for WindowsNT/2000/XP」などを使ってRAMディスクを作成できるようです。(未検証)
実際に試してみる
作成したRAMディスクとHDDの両方で、Railsプロジェクト及び、テスト用のDBを作成しておきます。
$ rails benchmark_test
$ cd benchmark_test
$ ruby script/generate model item name:string
$ rake db:migrate
script/consoleで、AR.createを試してみる。
require 'benchmark'
puts Benchmark::CAPTION
def benchmark(str)
puts Benchmark.measure { eval(str) }
end
benchmark '10000.times{|i| Item.create(:name => "test#{i}") }' # トランザクションなし
benchmark 'Item.transaction{ 10000.times{|i| Item.create(:name => "test#{i}") } }'
# トランザクションあり
結果はこんな感じ。
[RAM]
12.310000 4.150000 16.460000 ( 20.401763)
9.850000 0.170000 10.020000 ( 10.207979)
[HDD 7200rpm]
19.490000 8.420000 27.910000 ( 48.516296)
9.850000 0.200000 10.050000 ( 11.011132)
きちんとトランザクション使えばHDDとRAMで大きな差はないけど、トランザクション使わない場合はRAMディスク側の方が倍以上早いみたいです。
「とりあえず手間暇かけずに今回だけAR.create高速化したい」
みたいな、チキンRailsユーザー*1は、RAMディスク使ってみるといいかもしれません。
なお、「rake db:fixtures:load」は、CSVをSQLに変換する処理自体が重いので、別途SQLに変換かけたファイルを保存しておいた方が幸せになれるそうです。(@conceal_rsさん・談)
なるほど確かに。
Ruby, Rails, SQLite3, パフォーマンス改善, トランザクション, RAMディスク |
comments(0) |
trackbacks(0)
2009.04.13 Mon 18:54
TRACKBACKS
この記事へのトラックバックURL: http://www.red-mount.com/trackback/43_fab09ea52b78fcad33717ff998039dabc3756ffd
ABOUT ME
tak (Takahito Sezutsu)
コメント、トラックバックはお気軽に!
COMMENTS
-
Beanstalk - WEBで管理可能なフリーのSubversionサーバー
→LILAC (08.14) -
CSS Nite in Ginza Vol.29に行ってきました。
→Betsy (05.14) -
「オリジナルの項目が見つからなかったので、エイリアス“********”は開けません。」と出て、Finderで外付けHDDが開けない時は
→poo (04.19) -
MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
→tak (06.22) -
「オリジナルの項目が見つからなかったので、エイリアス“********”は開けません。」と出て、Finderで外付けHDDが開けない時は
→tak (06.22) -
「オリジナルの項目が見つからなかったので、エイリアス“********”は開けません。」と出て、Finderで外付けHDDが開けない時は
→ko (06.22) -
MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
→Mac (05.06) -
MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
→tak (03.11) -
MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
→tama (03.11) -
Mac版ATOK定額制(体験版)を1週間使ってみた
→tak (09.19)
COMMENTS