使用Ruby中的数百万行

时间:2017-10-15 15:12:38

标签: ruby

让我们说我有一个简单的任务,就是迭代一组值并对每个值执行某种操作,然后按照其最高值对该数组进行排序:

new_arr = []

@array.each do |val|
  new_arr << calc_operation(val)
end

new_arr.sort!

对于中小型价值观来说,这是一件轻而易举的事,但如果我需要处理其中的一百万个,那该怎么办呢?具体地,

  1. 如何加快迭代过程
  2. 如何在不中断内存使用的情况下对数据进行排序
  3. 我理解这里没有简单的解决方案,因此可以使用相应文章/概念指南的链接。

1 个答案:

答案 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 来避免将整个文件加载到内存中。