我有这样的代码:
User.any_scope.each do |user|
user.do_anything
end
如果我有大量用户:
User.any_scope.find_each do |user|
user.do_anything
end
如果用户数< 100:
使用find_each
的性能不是一个好主意这样的代码怎么样:
def smart_each_for(user)
MAX_COUNT = 100
user.count > MAX_COUNT ? 'find_each' : 'each' # 100 -
end
smart_each = smart_each_for(User.any_scope)
User.any_scope.send :smart_each do |user|
user.do_anything
end
性能好吗? MAX_COUNT怎么样?这个变量应该有什么价值?
答案 0 :(得分:2)
请参阅find_each方法的文档:
注意:无法设置订单。这是自动设置为 在主键(“id ASC”)上升序以进行批量订购 工作。这也意味着此方法仅在主键时有效 是可订购的(例如整数或字符串)。
注意:您也无法设置用于控制批次的限制 尺寸。
注意:就其性质而言,批处理受竞争条件限制 其他进程正在修改数据库。
注意:此方法仅用于批处理 大量记录不能同时存储在内存中。如果 你可能只需要循环不到1000条记录 最好只使用常规查找方法。
所以不,在你提供的例子中使用它不是一个好主意。