タグ

ブックマーク / akasata.com (2)

  • N+1 問題を回避する

    Kodougu では、SQL の Select における N+1 問題を回避することが重要になってきます。 N+1 問題とは、Tree 状の情報を DB から読み出す際、全レコードの取得に一つ+各レコード分だけ SQL を発行してしまう問題です。出来の良い O/R マッパーを使っているとよく引っかかります。 Kodougu のようなモデリングツールだと、この問題には非常によく出くわします。例えば、図上の要素を全て取得してから、要素に関係する関連の一覧を取得するなどを行うような場合です。Rails の ActiveRecord は気軽に DB にアクセスできてしまいますから。以下のコードでは、要素から出て行く関係線の一覧を取得しています。以下のようなコードを書いてしまうと、図を一枚描くたびに要素数分の SQL が発行されてしまいます。 [code: @elements = Element.f

    N+1 問題を回避する
  • rubyでDCIを実装するなら移譲でいいんじゃないか?

    以下の記事を読むと、DCIはRubyでは遅いという指摘があったので、移譲で 実装すればいいと思ったので、下記記事のサンプルコードをもとに、 send/method_missing, forwardable, delegateを使ったサンプルを書いて みました。 “DCI”in Ruby is completely broken ※ 上記記事では移譲を使ったアプローチにも言及しているし、改善するには 頑張らないといけないという程度の話と認識しました。 ■ ベンチマークの結果(ruby 1.9.3p194) without dci 3024223.4 (±1.7%) i/s - 15139474 in 5.007655s with dci 768491.0 (±6.6%) i/s - 3833440 in 5.011732s with dci(send) 1586461.1 (±2.1%) i

    rubyでDCIを実装するなら移譲でいいんじゃないか?
  • 1