下列所有的承担这些:因之属性计算与排队系统
- 轨3.0
- 红宝石V1.9
- resque
我们有3种型号:
- 产品 belongs_to的:SKU,belongs_to的:类
- SKU的has_many:产品,belongs_to的:类
- 类别的has_many:产品的has_many:单品
当我们更新产品(比方说,我们禁用它)我们需要有一些事情发生在相关的SKU和类别上。 sku更新时也是如此。
正确实现此目的的方法是在触发其他模型的更新事件的每个模型上都有一个after_save
。
例如:
products.each(&:disable!)
# after_save triggers self.sku.products_updated
# and self.category.products_updated (self is product)
现在,如果我们有5000个产品,我们是在为一种享受。同一类别可能会更新数百次,并在此过程中占用数据库。
我们也有一个很好的排队系统,所以更新的产品更实际的方法是products.each(&:queue_disable!)
,它可以简单地将5000个新任务投入工作队列。尽管如此,5000类别更新的问题仍然存在。
有没有办法避免db上的所有更新?
我们如何连接队列中每个类别的所有category.products_updated?
为什么在产品更换时需要更新类别?它是一个平均价格还是什么?如果是这样,请删除计数器缓存,并在需要时或使用http://redis.io/进行计算。 – 2012-03-23 18:24:51