让我们说我有一个简单的任务,就是迭代一组值并对每个值执行某种操作,然后按照其最高值对该数组进行排序:
new_arr = []
@array.each do |val|
new_arr << calc_operation(val)
end
new_arr.sort!
对于中小型价值观来说,这是一件轻而易举的事,但如果我需要处理其中的一百万个,那该怎么办呢?具体地,
我理解这里没有简单的解决方案,因此可以使用相应文章/概念指南的链接。
答案 0 :(得分:2)
在这种情况下最直接的解决方案是并行化计算。您在最后对答案进行排序,因此我假设您并不关心保存结果的顺序,因此无需同步并行计算。
您可以使用parallel
gem分割执行。
另外,为了加速单次计算,您可以考虑使用JRuby。
关于内存消耗:我只是尝试分配一百万个元素并对它们进行排序。仅消耗1-2秒和25Mb的内存。 162万,一千万。没什么大不了。这是代码:
getAddressFromGoogle(lat: photoLatitude!, long: photoLongitude!, completion:
{(streetAddress) in
})
UPD。您提到从CSV文件中获取数据。您可以使用# add 1 at the end to avoid outputting the array to console
ary = (1..1_000_000).map { rand }; 1
ary.sort; 1
来避免将整个文件加载到内存中。