ActiveRecordデータ処理アンチパターン / active-record-anti-patterns

ActiveRecordデータ処理アンチパターン / active-record-anti-patterns

Rails Developers Meetup 2018: Day 2( https://techplay.jp/event/655769 )で行った発表の資料です。

ActiveRecordはWebエンジニア達が嫌う(?)SQLを書かずとも、Rubyオブジェクトで気軽にデータベースへアクセスできる魔法のようなツールです。しかし便利な反面、何も考えずにゴリゴリActiveRecordを使ってDBアクセスしていると、劇的に重たいクエリが発行されたり非効率的なクエリが量産されたりします。

本発表ではそれらActiveRecordで陥りがちな罠をパターン化し、ActiveRecordデータ処理アンチパターンとして発表します。

※発表では実際のサンプルコードとともにパフォーマンスの計測結果も紹介します。

---

Blog記事: http://blog.toshimaru.net/rdm2018-active-record-anti-patterns/

5919537a0ecfa5d4dea704cf878ae90e?s=128

toshimaru

March 25, 2018
Tweet

Transcript

  1. 2.

    ࣗݾ঺հ • ӿຊ හؙʢtoshimaruʣ • Twitter: @toshimaru_e/Github: toshimaru • Rails

    Engineer ˏגࣜձࣾGunosy • ࠷ۙͷਪ͠gem: • toshimaru/rubocop-rails 2
  2. 5.

    8IZOPU42- w ʮͦΕ42-ͰͰ͖ΔΑʯ w ύϑΥʔϚϯεϑΝʔετͰٕज़બ୒͢ΔͷͰ͋Ε͹ۃ࿦/P 03. /P3VCZ͕ϕετ w ͳͥ"DUJWF3FDPSEʹͩ͜ΘΔ͔ʁ w

    %#ͱͷΠϯλϥΫγϣϯΛ"DUJWF3FDPSEϞσϧʹू໿͠ڽू ౓ͷߴ͍ϞσϧΛߏங͢Δ w 'MFYJCJMJUZ ॊೈੑ .FJOUFOBCJMJUZ ϝϯςφϯεੑ  3FBEBCJMJUZ Մಡੑ 5
  3. 6.

    ϕϯνϚʔΫ w ϕϯνϚʔΫ͸Լه63-ͷίʔυΛࢀߟʹॲཧͷ࣮ߦ࣌ؒͱϝϞϦ࢖༻ྔΛ ܭଌ w IUUQTEBMJCPSOBTFWJDDPNQPTUTQSPDFTTJOHMBSHFDTWpMFTXJUISVCZ w ϕϯνϚʔΫ؀ڥ w $JSDMF$*

    $16.# ্Ͱܭଌ w 3VCZ 3BJMT .Z42- w ιʔείʔυɾϕϯνϚʔΫ݁Ռ͸ެ։͞Ε·͢ w IUUQTHJUIVCDPNUPTIJNBSVSENSBJMT 6
  4. 26.

    վળޙιʔείʔυ ϕϯνϚʔΫ 26 5JNF .FNPSZ ΦϦδφϧ TFDT .# վળ TFDT

    .# վળ̎ TFDT .# ࣄྫ̍݁Ռ ࣮ߦ࣌ؒ͸ഒҎ্ߴ଎ԽɺϝϞϦফඅ΋෼ͷఔ౓· Ͱ཈͑Δ͜ͱ͕Ͱ͖·ͨ͠ɻ
  5. 44.

    վળޙιʔείʔυ ϕϯνϚʔΫ 44 5JNF .FNPSZ ΦϦδφϧ TFDT .# վળ̍ TFDT

    .# վળ̎ TFDT .# ࣄྫ̎݁Ռ ࣮ߦ࣌ؒ͸໿ഒߴ଎ԽɺϝϞϦফඅ΋෼ͷҎԼ·Ͱ ཈͑Δ͜ͱ͕Ͱ͖·ͨ͠ɻ
  6. 60.

    5JNF .FNPSZ ΦϦδφϧ TFDT .# վળ̍ TFDT .# վળ̎ TFDT

    .# վળޙιʔείʔυ ϕϯνϚʔΫ 60 ࣮ߦ࣌ؒɺϝϞϦফඅͱ΋ʹఔ౓·Ͱվળ͢Δ͜ͱ͕Ͱ ͖·ͨ͠ɻ ࣄྫ̏݁Ռ 60
  7. 61.

    "OUJ1BUUFSOT  "MM&BDI1BUUFSO  / 6QEBUF2VFSJFT1BUUFSO  3VCZ"HHSFHBUJPO1BUUFSO  /

    2VFSJFT1BUUFSO  6OOFDFTTBSZ2VFSZ1BUUFSO  6OOFDFTTBSZ.PEF*OJUJBMJ[BUJPO1BUUFSO 61