2016-01-09

DBとかパフォーマンスとか

チラ裏です。

そのカラムにインデックスを張るべきか否か、そしてそれはどう判断すべきなのか

  • かなり頻繁にwhere句として使われる
  • カーディナリティは極端に小さい(現状2パターンしか無い。直近増える予定もない)

...というカラムがあった。時間が無いなりに調べた結果、このカラムにはindex不要だと思い貼らないことにした。 これを、理論からだけじゃなくて実際の測定値から判断したかったなと。

とはいえ、開発環境のテストデータで測定してもあまり意味ないだろうし、どうやるのが良いかわからなかった。本番に投入して様子見するしかないのかなー。

migrationでしくじったがどうするのが良かったんだろう

インデックスを張るか悩んだカラムだが、最初はインデックス張る方向で進めておりその設定を書いたmigrationファイルをpushしていた。さらに、試験環境にrake db:migrateしていた。

しょうがないので、indexを削除するmigrationファイルをpushしたわけだが、これ大丈夫なんかな...。 rake db:migrateすると、index作ってまたすぐ削除することになると思われるので、本番環境のDBに実行した時にどのくらい影響あるんだろってのが少し気になってる。

Railsとパフォーマンス

Rails...、というかActiveRecord。 コールバックとか関連とか、ウェッブアプリ開発で最高便利な機能をたくさん持つ代わりに、用途によってはパフォーマンスが出にくいというのが今回の開発で思ったこと。

知らないだけってのもあるだろうけど、特に書き込みが多いアプリケーションとActiveRecordって相性悪いんじゃないかと思った。大量のINSERTを1クエリにまとめるactiverecord-importや、UPDATE句をまとめるupdate_all、DELETE句をまとめるdelete_allなどはあるものの、それなりに制約があった。ActiveRecordの機能が十分に使えなくなってしまう。

実際、その制約が理由でこれらの機能をうまく導入できなかったりもした。 大量書き込みって時点でRails way外れてんのかなぁ〜