在Ruby中处理数百万行

在Ruby中处理数百万行,ruby,Ruby,假设我有一个简单的任务,迭代一组值并对每个值执行某种操作,然后按其最高值对该数组进行排序: new_arr = [] @array.each do |val| new_arr << calc_operation(val) end new_arr.sort! new_arr=[] @array.each do|val| 在这种情况下,最简单的解决方案是并行计算。您在最后对答案进行排序,因此我假设您不关心结果的保存顺序,因此不需要同步并行计算。 你可以用它来分割执行 此外,为了

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

new_arr = []

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

new_arr.sort!
new_arr=[]
@array.each do|val|

在这种情况下,最简单的解决方案是并行计算。您在最后对答案进行排序,因此我假设您不关心结果的保存顺序,因此不需要同步并行计算。 你可以用它来分割执行

此外,为了加快单个计算速度,可以考虑使用JRuBi.</P> 关于内存消耗:我刚刚尝试分配一百万个元素并对它们进行排序。该服务器仅消耗1-2秒和25Mb内存。一千万的162Mb。没什么大不了的。代码如下:

# add 1 at the end to avoid outputting the array to console
ary = (1..1_000_000).map { rand }; 1
ary.sort; 1

UPD。您提到您从CSV文件获取数据。您可以使用
CSV.foreach
来避免将整个文件加载到内存中。

这种情况下最简单的解决方案是并行计算。您在最后对答案进行排序,因此我假设您不关心结果的保存顺序,因此不需要同步并行计算。 你可以用它来分割执行

此外,为了加快单个计算速度,可以考虑使用JRuBi.</P> 关于内存消耗:我刚刚尝试分配一百万个元素并对它们进行排序。该服务器仅消耗1-2秒和25Mb内存。一千万的162Mb。没什么大不了的。代码如下:

# add 1 at the end to avoid outputting the array to console
ary = (1..1_000_000).map { rand }; 1
ary.sort; 1

UPD。您提到您从CSV文件获取数据。您可以使用
CSV.foreach
来避免将整个文件加载到内存中。

这需要更多信息。数据来自哪里?CSV文件、数据库等?如果是后者,是否确定不能在数据库内执行操作?你的任务现在需要多长时间?你想花多长时间?您真的需要对所有记录进行排序,还是检索前X?谢谢。这里没有数据库,我纯粹是指Ruby作为一种语言。数据当前来自CSV文件。我正在研究什么技术可以用来加速迭代。你说没有数据库,但这是否意味着没有数据库?这就是数据库的用途。@muistooshort如果数据库已就位,这将如何加快迭代速度?有些数据库是专门为大规模“map reduce”类型的问题而设计的,这大致就是您在这里遇到的问题。这需要更多信息。数据来自哪里?CSV文件、数据库等?如果是后者,是否确定不能在数据库内执行操作?你的任务现在需要多长时间?你想花多长时间?您真的需要对所有记录进行排序,还是检索前X?谢谢。这里没有数据库,我纯粹是指Ruby作为一种语言。数据当前来自CSV文件。我正在研究什么技术可以用来加速迭代。你说没有数据库,但这是否意味着没有数据库?这就是数据库的用途。@muistooshort如果数据库已就位,这将如何加快迭代?有些数据库是专门为大规模“map reduce”类型的问题设计的,这大致就是您在这里遇到的问题。