下列所有的承擔這些:因之屬性計算與排隊系統
- 軌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