🍭

MySQLアダプタTrilogyでRailsアプリを高速化した

2024/02/06に公開

通常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