рд╣рдо рд░реЗрд▓ рд╕реЗрд╡рд╛ (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдорд▓реЗ) рдХреА рд╕реНрдореГрддрд┐ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ


рд░реВрдмреА рдЬреВрдирд┐рдпрд░ + рдХреЗ рд▓рд┐рдП рд░реВрдмреА рдФрд░ рд░реВрдмреА рдХреЗ рд▓рд┐рдП, рдордзреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕

рд╣рдо рдЕрдХреНрд╕рд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рддрдиреЗ рд╕рдВрд╕рд╛рдзрди рд▓рдЧреЗрдВрдЧреЗред рдФрд░ рдпрд╣ рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рд░ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрд╡рд▓рдкрд░ рдЕрдкрдиреЗ рдХреМрд╢рд▓ рдХреЛ рдмреЗрд╣рддрд░ рдФрд░ рд╕реНрд╡рд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рджреВрд╕рд░реЗ, рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдЬрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рд╢реНрди рдХреЛ рдЕрднреА рднреА рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рд░рд╣рд╕реНрдпрдордп рдмрдЧ


, 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 ).

?


1:


, тАФ , 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 ,

All Articles