
рд░реВрдмреА рдЬреВрдирд┐рдпрд░ + рдХреЗ рд▓рд┐рдП рд░реВрдмреА рдФрд░ рд░реВрдмреА рдХреЗ рд▓рд┐рдП, рдордзреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕
рд╣рдо рдЕрдХреНрд╕рд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рддрдиреЗ рд╕рдВрд╕рд╛рдзрди рд▓рдЧреЗрдВрдЧреЗред рдФрд░ рдпрд╣ рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рд░ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрд╡рд▓рдкрд░ рдЕрдкрдиреЗ рдХреМрд╢рд▓ рдХреЛ рдмреЗрд╣рддрд░ рдФрд░ рд╕реНрд╡рд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рджреВрд╕рд░реЗ, рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдЬрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рд╢реНрди рдХреЛ рдЕрднреА рднреА рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд░рд╣рд╕реНрдпрдордп рдмрдЧ
, CRM Kubernetes. Excel , . Sidekiq - , ( exception-, ). тАШin_progressтАЩ, Sidekiq , .
, , , , , . , CRM, , .
""
"" тАФ . , - , . benchmark-memory, :
def benchmark_memory(&block)
Benchmark.memory do |x|
x.report('') do
yield
GC.start(full_mark: true, immediate_sweep: true) # Garbage Collector',
end
end
end
Garbage Collector . ┬л┬╗ . GC Ruby , . , , . , , 100 GC:
100
50.966M memsize ( 1.445M retained)
850.405k objects ( 24.514k retained)
50.000 strings ( 50.000 retained)
100
80.554M memsize ( 920.363k retained)
1.303M objects ( 17.565k retained)
50.000 strings ( 50.000 retained)
, Garbage CollectorтАЩ, :
benchmark_memory { puts 1 }
Calculating -------------------------------------
1
464.000 memsize ( 0.000 retained)
2.000 objects ( 0.000 retained)
0.000 strings ( 0.000 retained)
, 464 .
:
100 :
1.482M memsize ( 1.480M retained)
24.814k objects ( 24.793k retained)
50.000 strings ( 50.000 retained)
1000 :
12.811M memsize ( 12.809M retained)
226.587k objects ( 226.556k retained)
50.000 strings ( 50.000 retained)
100 , 1000 тАФ . тАФ , . , , , ( ). , , .
, , , . Garbage CollectorтАЩ 100 тАФ 50 ( ), 500 1000. 38_000 тАФ "" 18,5 ! (38 * 500 = 19_000 =~ 18,5 ).
?
, тАФ , xlsx csv. ┬л┬╗, , . , ┬л┬╗ , 40% :
100 xlsx:
1.482M memsize ( 1.480M retained)
24.814k objects ( 24.793k retained)
50.000 strings ( 50.000 retained)
100 csv:
852.195k memsize ( 849.968k retained)
12.034k objects ( 12.007k retained)
50.000 strings ( 50.000 retained)
2:
:

, , . ReportWorkerтАЩ . . , :
def export_collection(objects_ids)
Application.where(id: objects_ids.uniq).order(created_at: :desc)
end
, , ? ActiveRecord find_each
:
def to_csv_export(objects_ids)
CSV.open(file_path, 'w') do |csv|
csv << export_headers #
export_collection(objects_ids).find_each do |application| # ,
begin
csv << export_row(application.decorate) #
rescue StandardError => e
errors << "#{application.id}: #{e}"
end
end
end
end
, :
100 :
166.688k memsize ( 165.445k retained)
1.729k objects ( 1.715k retained)
50.000 strings ( 50.000 retained)
1000 :
167.510k memsize ( 166.227k retained)
1.734k objects ( 1.719k retained)
50.000 strings ( 50.000 retained)
, , , , .
:
, , тАФ , 18,5 , 200 . , , , , . , , . . , , .
: 170 ,