рдХреЛрдб рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ рдЬреЛ рд╣рд░ рдХреЛрдИ рд╕рдордЭ рдЬрд╛рдПрдЧрд╛?


рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рд╣рдордиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреИрдорд┐рд▓ рд▓реЗрд▓реЛрдиреЗрдХ рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рдкрдардиреАрдпрддрд╛ рдФрд░ "рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреА рд╕рд╣рд╛рдиреБрднреВрддрд┐" рдХреЗ рдЕрд░реНрде рдкрд░ рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рд╕реЛрдЪрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдХреМрди рджреЗрдЦреЗрдЧрд╛? рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЗрд╕рдХреА рдкрдардиреАрдпрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА ??
тАЬрдХреЛрдИ рднреА рдореВрд░реНрдЦ рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдорд╢реАрди рд╕рдордЭрддреА рд╣реИред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдЪреНрдЫреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реА рдРрд╕рд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд▓реЛрдЧ рд╕рдордЭрддреЗ рд╣реИрдВ, рднреА, тАЭрдорд╛рд░реНрдЯрд┐рди рдлрд╛рдЙрд▓рд░ рдХрд╣рддреЗ рд╣реИрдВред
рд╕рдордп-рд╕рдордп рдкрд░, рдЬрдм рдореБрдЭреЗ рдХреБрдЫ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдмреАрдЪ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЦреЛ рджреЗрддрд╛ рд╣реВрдВред рдЖрдкрдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ - рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдб рдореЗрдВ рдЖрдпрд╛ рдерд╛ рдЬреЛ рдХрд┐ рднрдпрд╛рдирдХ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдардиреАрдп рдерд╛ред
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ: рджреЛ рд╕рд╛рд▓ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХреЛрд░реНрд╕ "рдореИрдВ рдПрдХ рдкреНрд░реЛ рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ ред "

рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░реЛрдореЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп 10,000 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред
рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрд╛:

defmodule Util.Combinators do def then(a, b) do fn data -> b.(a.(data)) end end def a ~> b, do: a |> then(b) end 

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ: рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдХрд▓реНрдкрдирд╛ рд╣реИ рдпрд╛ рдХреЛрдб рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рдкрд╛рд╕ рдПрдХ рдареЛрд╕ рдЧрдгрд┐рддреАрдп рдкреГрд╖реНрдарднреВрдорд┐ рд╣реИред рдореИрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрд╡рдЪреЗрддрди рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣рд╛рдБ рдХреБрдЫ рдЧрд▓рдд рдерд╛ред тАЬрдЗрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, тАЭрдореИрдВрдиреЗ рдРрд╕рд╛ рд╕реЛрдЪрд╛ред рдмрд╣реБрдд рдЬрд▓реНрджреА, рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓ рдЧрдпрд╛:

 import Util.{Reset, Combinators} # ... conn = conn!() Benchee.run( # ... time: 40, warmup: 10, inputs: inputs, before_scenario: do_reset!(conn) ~> init, formatter_options: %{console: %{extended_statistics: true}} ) 

рд╣рдореНрдо, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рди рдХреЗрд╡рд▓ ~> рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреЙрди! / 0 рдФрд░ do_res / / 1 рдлрд╝рдВрдХреНрд╢рди рднреА рд╣реИрдВред рдареАрдХ рд╣реИ, рдЖрдЗрдП рдЖрдЗрдПрд╕рд╕реЗрдЯ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

 defmodule Util.Reset do alias EventStore.{Config, Storage.Initializer} def conn! do {:ok, conn} = Config.parsed() |> Config.default_postgrex_opts() |> Postgrex.start_link() conn end def do_reset!(conn) do fn data -> Initializer.reset!(conn) data end end end 

рдХреЙрди! рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕ рд╕рд╛рдЗрдЯ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд░реБрдХрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдореИрдВ рдмрд▓реНрдХрд┐ do_reset рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ! / 1ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рддрд░реНрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░ рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдПрдХ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ; рдФрд░ рдирд╛рдо рд╣реА рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИред



рдореИрдВрдиреЗ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЛ рдХреЛрдб рд░рд┐рд╡рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред Benchee рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкрд╣рд▓реЗ_рд╕реЗрдирд╛рд░рд┐рдпреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдирдкреБрдЯ рд▓реЗрддрд╛ рд╣реИред рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдЕрдЧрд▓реЗ рдЪрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╢рд╛рдпрдж рд▓реЗрдЦрдХ рдХрд╛ рдорддрд▓рдм рд╣реИ:

  • рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрд╕ рдХрдиреЗрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрддред
  • EventStore рд░реАрд╕реЗрдЯ рдХрд░реЗрдВред
  • рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЖрдЗрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдирдкреБрдЯ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЦрд╛рддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛)ред
  • рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ (рдпрд╛рдиреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдирд╛ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджрд░реНрдЬ рдХрд░рдирд╛)ред
  • рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдРрд╕реЗ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ init рдлрдВрдХреНрд╢рди рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдпрд╣ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

рдкрд╣рд▓рд╛ рдХрджрдо рдирд┐рд╣рд┐рдд рдЖрдпрд╛рдд рдХреЗ рдмрдЬрд╛рдп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдореБрдЭреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА "рдЬрд╛рджреВ" рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдХрднреА рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ Ecto.Query рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдмрдирд╛рддрд╛ рд╣реИред рдЕрдм рд╣рдорд╛рд░рд╛ рдХрдиреЗрдХреНрд╢рди рдореЙрдбреНрдпреВрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 defmodule Benchmarks.Util.Connection do alias EventStore.{Config, Storage.Initializer} def init! do with {:ok, conn} = Config.parsed() |> Config.default_postgrex_opts() |> Postgrex.start_link() do conn end end def reset!(conn), do: Initializer.reset!(conn) end 

рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдХ "рд╣реБрдХ" рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдкрд╣рд▓реЗ_рд╕реЗрдирд╛рд░рд┐рдпреЛ: fn рдирд┐рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ -> рдЗрдирдкреБрдЯ рдЕрдВрдд

рдЬреЛ рдХреБрдЫ рднреА рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ рд╡рд╣ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реИред рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 alias Benchmarks.Util.Connection conn = Connection.init!() # ... Benchee.run( inputs: inputs, before_scenario: fn inputs -> Connection.reset!(conn) init.(inputs) end, formatter_options: %{console: %{extended_statistics: true}} ) Connection.reset!(conn) 

рдХреНрдпрд╛ рдпрд╣ рдХреЛрдб рд╕рд╣реА рд╣реИ? рд╢рд╛рдпрдж рдЕрднреА рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ? рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИред рдХреНрдпрд╛ рдпрд╣ рддреБрд░рдВрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рд╛рдБред

рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ?


рдЬрдм рдореИрдВрдиреЗ рд▓реЗрдЦрдХ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛, рддреЛ рдореИрдВрдиреЗ рд╕реБрдирд╛: "рдХреВрд▓ред" рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереАред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХ рдХреЛрдб рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдХреЛрдб рдХреА рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЗрд╕рдХреА рдХрдо рдкрдардиреАрдпрддрд╛ рдХреНрдпрд╛ рдереАред

рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдкрдардиреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдордЭрд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИред рдФрд░ рддрд░реНрдХ "рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ," рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рд╣реИ "рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рд╕рд┐рд░реНрдл рдПрдХ рдмреБрд░рд╛ рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ, рдореИрдВ ┬п \ _ (уГД) _ / ┬п рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ"ред



рдпрд╣ рдПрдХ (рдЧреИрд░) рдкреНрд░рдмрдВрдзрди рдореБрджреНрджрд╛ рд╣реИ


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

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

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



рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдХреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛


рдпрджрд┐ рдЖрдк рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рд╡рд┐рдХрд╛рд╕ рдПрдХ рдЯреАрдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдЖрдкрдХрд╛ рдХреЛрдб рд╕рдВрдЪрд╛рд░ рдХрд╛ рдПрдХ рдЕрдЬреАрдм рд░реВрдк рд╣реИред рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЖрдкрдХреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдВрдЧреЗред

"рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рд╕рд╣рд╛рдиреБрднреВрддрд┐" рдПрдХ рдХреНрд▓реАрдирд░ рдФрд░ рдЕрдзрд┐рдХ рддрд░реНрдХрд╕рдВрдЧрдд рдХреЛрдб рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ, рддрдм рднреА рдЬрдм рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣реА рд╣реИ, рдФрд░ рдкреНрд░рдмрдВрдзрдХ рд▓рдЧрд╛рддрд╛рд░ "рдХреБрдЪрд▓" рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдЕрдкрдардиреАрдп рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдХреИрд╕рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдордЭрдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реИред



рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ


рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ Elixir рдкрд░ рдХреЛрдб рд▓рд┐рдЦрд╛ рд╣реИ:

 result = calculate_results() Connection.close(conn) result 

рдлрд┐рд░ рдореИрдВрдиреЗ рдПрдХ рд░реВрдмреА рдЯреИрдк рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 calculate_result().tap do Connection.close(conn) end 

рдЖрдИрдПрдордПрдЪрдУ, рдордзреНрдпрд╡рд░реНрддреА рдЪрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЖрдпрд╛:

 with result = calculate_results(), Connection.close(conn), do: result 

рдкрд░рд┐рдгрд╛рдо рд╡рд╣реА рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рджреВрд╕рд░реЛрдВ рдХреА рдХреАрдордд рдкрд░ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдерд╛ред рдореИрдВ рдЖрдкрдХреЛ рдЙрдкрд╛рдп рд╕реЗ рдкрд░реЗ рдХреЛрдб рдХреЛ рдЬрдЯрд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛, рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред рдХреБрдЫ рд╡рд┐рджреЗрд╢реА рд╕рдорд╛рд░реЛрд╣ рдпрд╛ рдЪрд░ рдкреЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЗ рд╕рд╣рдХрд░реНрдореА рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ: "рдЬрдм рдЖрдк рдЕрдкрдирд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред"

Source: https://habr.com/ru/post/hi430510/


All Articles