前回の Django のチュートリアルをやってみるよ (3) のエントリで、 DB に依存したテストを速くするための方法として、いくつかの記事で ramdisk を使うアプローチが紹介されていたので試してみました。
MacBook Pro Retina, 13-inch, Late 2012 (2.5 GHz Intel Core i5, memory: 8 GB) での検証ですが、裏側でいろいろ動いているような環境での結果なので、細かい数字はあまりアテになるものではないです (目に見える範囲でアプリケーションは全部終了させましたけれど)。それから実行したテストは表に出せる種類のものではないのでその辺もご了承ください。
というか元々が SSD なのでそんなに速くならないんじゃないかという気がしていましたが、
- 2739 wallclock secs
とか掛かっていたテストが、 ramdisk 上に MySQL のデータディレクトリを置くようにしたところ、
- 1904 wallclock secs
とかまで速くなりました。 835 秒削減! うーん、まあまあですね。
ということで具体的な手順の紹介、……といきたいところなのですが、 HomeBrew で入れた MySQL を使うということであれば、 Mysql on ramdisk via osx homebrew - Alexfu に掲載されているスクリプトを実行すれば、
- ramdisk の作成とマウント
- ramdisk を MySQL のデータディレクトリとして初期化
- MySQL のインスタンスを立ちあげ
までを一気にやってくれるので、あとは Unix domain socket として /tmp/mysql-ramdisk.sock を使うようにアプリ側を設定するだけで済んでしまいます。 OSX 以外の環境でも似たようなスクリプトを書くことは難しくないと思います。
ということでテストを速くするアプローチとしてはそこそこ有効っぽい感じですが、期待していたほどでもないなあというのが正直なところです。一回一回テスト用の初期データをロードしなおしたりしないとか、 DB に依存するテストを可能な限り減らすとかの努力はやっぱり必要ですね。