Мой массив имеет 75000 записей и выглядит следующим образом:Как ускорить процесс простой итерации массива?
orders = [{ :order_id=>"7617",
:date=>"2014-11-17 19:24:31",
:firstname=>"Jack",
:lastname=>"Bauer"},
{ :order_id=>"7618",
:date=>"2014-11-17 19:34:51",
:firstname=>"James",
:lastname=>"Bond"},
... ]
мне теперь нужно перебрать этот массив со следующим кодом:
order_id_array = []
order_array = []
orders.each do |order|
prepared_order = prepare_order(order)
order_id_array << prepared_order[0]
order_array << prepared_order[1]
end
def prepare_order(order)
order_id = order[:order_id]
[ order_id,
{ :order_id => order_id,
:name => "#{order[:firstname]} #{order[:lastname]}",
:date => Time.zone.parse(order[:date]),
:customer_id => Moped::BSON::ObjectId.new } ]
end
Этот процесс занимает около 15 секунд. Это слишком много. Иногда мой массив содержит 5M + хэши.
Как ускорить этот процесс?
Я пытался использовать parallel gem так:
Parallel.each(orders, :in_threads => 3){ |order|
...
}
Однако это ничего не делает для меня.
«Как ускорить этот процесс» - шаг 1 - найти, какая часть работает медленно. –
Я искал более фундаментальный способ ускорения. Я здесь не очень тяжелый расчет, так что, даже если я, например. вытащил разбор времени, я все равно был бы в ситуации, когда мне приходилось перебирать их поодиночке. – ChristofferJoergensen
Кстати, вы пробовали резьбу на МРТ? Плохая идея. Попробуйте JRuby или Rubinius, это может привести к лучшим результатам. –