ポリモーフィック関連、indexの貼り方、Vue.jsの話題が上がった。
Vue.jsは全くわからないので割愛。
Q: ポリモーフィック関連はコントローラでは使わないのか。業務ではどういうものに使うのか?
A: コントローラではほとんど使わない。業務ではCommentやFavoriteやNotificationなど、どのモデルについていても ふるまいが全く同じもの にだけ使う。
- 便利だからとポリモーフィック関連を作ってはいけない。ポリモーフィック関連は便利にするための仕組みではない。
- ActiveStorage等gemはあえて使っている面もある。
- ついているモデルによって挙動が変わるような場合はポリモーフィック関連にすべきではない。
if commentable == report elsif commentable == book
みたいなコードを生んでしまうと後々つらい。
- インターフェースが同じものにだけ使う。
- ポリモーフィック関連はSQLアンチパターンにも載っている。
参考
そろそろポリモーフィック関連について一言いっとくか - Qiita
indexの話
- indexとは?
- 索引。あると検索が早くなる。ただし付けすぎもよくない。
- つけすぎるとindexを更新する作業自体が重くなってしまう。
- 大体のサイトはReadの方が多いのでWriteの重さはそれほど気にしなくてもいいのでは、という意見もあった。
- つけすぎるとindexを更新する作業自体が重くなってしまう。
- 索引。あると検索が早くなる。ただし付けすぎもよくない。
- 遅いクエリをどうやって見つけるか?
- 監視ツール
- explain(実行計画)
- index最初からつける?運用始まってからつける?
- 意見A:運用始まってから付けたほうが効率のいいindexを付けられる。
- 意見B:レスポンスは徐々に悪くなることが多い。そうなってからindex付け直すのはやりづらいので最初から付けておいた方がいい。
- 意見C:サイトの規模が大きいとDBアクセス止められない場合がある。indexがオンラインでDB停止させずに付けることができたとしても、作成中は遅くなるはずなのでそれを許容できないかも。
- 複合whereの順番
- 今は関係ない(ソース不明)
- 複合indexの順番
- 順番によってindexを使うかどうかが変わるので、どの順番でindexを作るかが非常に重要
感想
- ポリモーフィック関連を「DRYに書く仕組み」だと大きな勘違いをしており、その誤った認識を正すことができて本当に良かった。
- indexは最初からつけておいたほうがいいのではないかと思った。
- 複合indexは順番が重要だと分かった。速度が重要なDB設計するときは意識しようと思った。