MySQLアダプタTrilogyでRailsアプリを高速化した
通常Ruby on RailsでMySQLを使う場合、mysql2
というMySQLアダプタのGemを利用しますが、今回はGitHub社がGitHubのために開発した新しいMySQLアダプタTrilogyに切り替えたところパフォーマンスが改善したので紹介します。
パフォーマンス差
以下は中規模?レベルのRailsアプリでmysql2とtrilogyのベンチマークを取った結果です。
mysql2 | trilogy | |
---|---|---|
クエリ時間(19%改善) | 101msec | 81msec |
テスト時間(14%改善) | 61sec | 52sec |
そこそこSQLが実行される(40クエリくらい)コントローラのクエリ時間と、テスト実行時間を比較しました。クエリ数がそれなりにあるのであれば10-20%程度の改善が見込めました。アダプタを切り替えるだけでパフォーマンス改善するなんて嬉しいですね。
ただ、クエリがあまり支配的ではないアプリではそこまで高速化の恩恵は受けないと思います。
Trilogyの導入方法
導入はとても簡単です。Trilogyが登場した背景の一つに、mysql2インストール時にlibmysqlclientやlibmariadb-devなどに依存していて失敗することがあり、Trilogyは依存なしでインストールすることができます。
そしてTrilogyはRails7.1で正式サポートされており、一般的な使い方であればほぼ問題なく切り替えられると思います。
Rails7.1以降
Trilogy Gemをインストールし、アダプタを指定するだけです。
gem "trilogy"
adapter: trilogy
Rails7.0以前
Rails6以降であればサポートするためのGemを一緒に導入します。
gem "trilogy"
gem "activerecord-trilogy-adapter"
その他
AcitveRecordに依存したサードパーティのGemによってはTrilogyでエラーになることもあるかもしれません。例えば activerecord-import
はついこの間Trilogyに対応したりしてます。みなさんもTrilogyを使ってみて、もし動かない問題があれば各ライブラリにフィードバックしていきましょう。いえい。
Discussion