在Rails中,find_each和where有什么区别?
In Rails, what's the difference between find_each and where?
在Rails中,find_each and where都用于从ActiveRecord支持的数据库中检索数据。
你可以把你的查询条件传给where
,比如:
c = Category.where(:name => 'Ruby', :position => 1)
并且您可以将批量大小传递给 find_each
,例如:
Hedgehog.find_each(batch_size: 50).map{ |p| p.to_json }
但是下面2个代码有什么区别呢?
# code 1
Person.where("age > 21").find_each(batch_size: 50) do |person|
# processing
end
# code 2
Person.where("age > 21").each do |person|
# processing
end
代码1是不是每次批量取50个元组,代码2是一次性取完所有元组?欢迎详细说明。
我的看法是:
where
和find_each
都可以用于批量检索,但用户可以在使用find_each
时定义批量大小。
find_each
不支持传递查询条件
理解有误请指正
活动记录关系不会自动将所有记录加载到内存中。
当您调用#each
时,所有记录将被加载到内存中。当您调用 #find_each
时,记录将按给定的批量大小分批加载到内存中。
因此,当您查询 returns 多条记录时,对于服务器的可用资源来说内存过多,那么使用 #find_each
将是一个不错的选择。
基本上就像使用ruby的惰性枚举#to_enum#lazy
和#each_slice
然后#each
(非常方便)。
在Rails中,find_each and where都用于从ActiveRecord支持的数据库中检索数据。
你可以把你的查询条件传给where
,比如:
c = Category.where(:name => 'Ruby', :position => 1)
并且您可以将批量大小传递给 find_each
,例如:
Hedgehog.find_each(batch_size: 50).map{ |p| p.to_json }
但是下面2个代码有什么区别呢?
# code 1
Person.where("age > 21").find_each(batch_size: 50) do |person|
# processing
end
# code 2
Person.where("age > 21").each do |person|
# processing
end
代码1是不是每次批量取50个元组,代码2是一次性取完所有元组?欢迎详细说明。
我的看法是:
where
和find_each
都可以用于批量检索,但用户可以在使用find_each
时定义批量大小。find_each
不支持传递查询条件
理解有误请指正
活动记录关系不会自动将所有记录加载到内存中。
当您调用#each
时,所有记录将被加载到内存中。当您调用 #find_each
时,记录将按给定的批量大小分批加载到内存中。
因此,当您查询 returns 多条记录时,对于服务器的可用资源来说内存过多,那么使用 #find_each
将是一个不错的选择。
基本上就像使用ruby的惰性枚举#to_enum#lazy
和#each_slice
然后#each
(非常方便)。