4

私は(とりわけ)と属性を持っline_itemsています。unit_pricequantity

これを Ruby on Rails でモデル化する最良の方法は何ですか?

現在、私のLineItemモデルの多くの関数は次のパターンに従っています。

def total_price
  unit_price * quantity
end

これは機能しますが、知りたいのですが、このアプローチは有用ですか、それとも 100 万人のユーザーが同時に使用しているときにアプリが機能しなくなるでしょうか?

別の方法はtotal_price、各保存後に次のように更新されるデータベース フィールドとして保存することですafter_save :update_total。ただし、冗長なデータベース列の大ファンではありません。それらを最小限に抑えたいと思います。

これを行う専門的な方法は何ですか?

4

1 に答える 1

6

これは、計算値とストレージの一般的な問題です。すべてのケースに単一の答えがあるかどうかはわかりませんが、考慮すべき要素がいくつかあります。

  • 計算は高価ですか?もしそうなら、保存した方が良い
  • unit_priceのような変数は変化していますか? はいの場合、計算する方が良いです。保存すると、 unit_price が変更されたときにすべての total_price を再計算する必要があるためです
  • 計算された値を照会しますか? はいの場合は、保存してデータベース機能を使用することをお勧めします (たとえば、合計価格が 500 を超えるすべての製品が必要な場合)。
  • この (単純な) ケースでは、データベースに計算 (WHERE UNIT_PRICE * QUANTITY > 500) を要求することもできますが、ある種の計算は SQL で表現できないか、または便利ではないことに注意してください。

すべての「パフォーマンス」の側面について、唯一の正しい答えは「測定」です。それを前もって言うことはできません。つまり、最初は最も簡単な方法 (私が計算します) を選択し、プロファイルを作成してから、切り替える理由があるかどうかを確認します。Rails と Ruby にはプロファイリング ツールがたくさんあります (Railsのパフォーマンス テストから始めることができます)。

于 2013-02-21T15:44:02.720 に答える