在Ruby on Rails中计算/存储line_item总数的最佳方法是什么?

Tin*_*n81 4 ruby activerecord ruby-on-rails-3

我有line_itemsunit_pricequantity属性(其中包括).

在Ruby on Rails中对此进行建模的最佳方法是什么?

现在,我的LineItem模型中的许多函数都遵循这种模式:

def total_price
  unit_price * quantity
end
Run Code Online (Sandbox Code Playgroud)

这有效,但我想知道:当这百万用户同时使用它时,这种方法是否有用还是会让我的应用程序瘫痪?

另一种方法是将total_price每个保存后存储为数据库字段,并使用类似的内容进行更新:after_save :update_total.不过,我不是冗余数据库专栏的忠实粉丝.我想将它们保持在最低限度.

这样做的专业方式是什么?

Mar*_*tin 5

这是计算值与存储的一般问题.我不确定所有案例都有一个答案,但这里有一些要考虑的因素:

  • 计算成本高吗?如果是,最好存储
  • 像unit_price这样变量是否在变化?如果是,则更好地计算,因为如果您存储,则在unit_price更改时您将不得不重新计算所有total_price
  • 你会查询计算值吗?如果是,则更好地存储和使用数据库功能(例如,如果您希望所有产品的总价格大于500).
  • 请注意,在这个(简单)情况下,可以要求数据库也进行计算(WHERE UNIT_PRICE*QUANTITY> 500),但在SQL中表达某些计算可能是不可能或不方便的.

对于所有"表现"方面,唯一正确的答案是:衡量.你不能事先说出来.这意味着,最初,选择最简单的方法(我会计算),配置文件,然后看看是否有理由切换.Rails和Ruby充满了分析工具(你可以从Rails 性能测试开始).