Relation#update(id, attributes)
docs提到“无论对象是否成功保存到数据库,返回结果对象”,而Relation#update_all(updates, conditions = nil, options = {})
指出没有实例化,回调或验证(直接DB查询)。Rails Relation#update_all消耗的内存比Relation#更新
运行一个简单的性能测试并用Relation#update_all
代替Relation#update
,看起来内存消耗增加了。
任何解释?
摘录:
#Before
MyModel.update(my_hash['id'], special_attrs)
#After (more memory consumed)
MyModel.where(:id => my_hash['id']).update_all(special_attrs)
#Update-2 (slightly more memory consumed than with update(id, attrs)
MyModel.update_all(special_attrs, {:id => my_hash['id']})
- 的Windows XP(叶 - 我知道)
- 的JRuby 1.6.8(1.9)
- 的Rails 3.2.8
UPDATE - 一些用于比较的基本数字: 对于大约700条更新语句,有一个差异ce约0.6MB(每条语句0.8kB)
UPDATE 2 - 根据@ philip-hallstrom的建议删除了AREL链接。内存占用略有减少,但MyModel.update_all(attrs, conditions)
消耗的内存比MyModel.update(id, attrs)
多。
我们在谈论的内存有多大的差异? –
用一些数字更新了这个问题 – tamersalama