Vela โ†’ cache เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐเบชเปเบฒเบฅเบฑเบšเบŠเบธเบ”เป€เบงเบฅเบฒเปเบฅเบฐเบญเบทเปˆเบ™เป†

เปƒเบ™ fintech, เบžเบงเบเป€เบฎเบปเบฒเบกเบฑเบเบˆเบฐเบกเบตเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบญเบฑเบ”เบ•เบฒเปเบฅเบเบ›เปˆเบฝเบ™เป€เบ‡เบดเบ™เบ•เบฒเบ—เบตเปˆเบกเบตเบ›เบฐเบฅเบดเบกเบฒเบ™เบซเบผเบฒเบ. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเปเบซเบผเปˆเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เปเบฅเบฐเบžเบงเบเป€เบ‚เบปเบฒเปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ extrapolate เบญเบฑเบ”เบ•เบฒเปเบฅเบเบ›เปˆเบฝเบ™เบชเปเบฒเบฅเบฑเบšเบกเบทเป‰เบญเบทเปˆเบ™, เบกเบทเป‰เบซเบผเบฑเบ‡เบˆเบฒเบเบกเบทเป‰เบญเบทเปˆเบ™, เป€เบ”เบทเบญเบ™เบ•เปเปˆเป„เบ›เปเบฅเบฐเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เบชเบฒเบกเบ›เบตเบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบฒ. เบ–เป‰เบฒเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบ„เบปเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เบ„เบฐเป€เบ™เบญเบฑเบ”เบ•เบฒ right, เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบ›เบดเบ”เบ—เบธเบฅเบฐเบเบดเบ”เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆ stupidly เบ›เปˆเบฝเบ™เป€เบ‡เบดเบ™เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เปเบฅเบฐเบ”เบฑเบ‡เบ™เบตเป‰เบ•เปเปˆเป„เบ›. เบšเบฒเบ‡เปเบซเบผเปˆเบ‡เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบทเบซเบผเบฒเบ, เบšเบฒเบ‡เบšเปˆเบญเบ™เบชเบฐเบซเบ™เบญเบ‡เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ—เบตเปˆเบชเบปเบกเบšเบนเบ™, เบกเบตเบเบฒเบ™เบฅเบงเบกเบเบฑเบ™เบ—เบตเปˆเบซเบฒเบเบฒเบเบ‚เบญเบ‡เบกเบนเบ™เบ„เปˆเบฒเป€เบเบทเบญเบšเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบ„เบนเปˆเบœเบปเบงเป€เบกเบ exotic. เบงเบฝเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เป€เบžเบทเปˆเบญ sift เบœเปˆเบฒเบ™เบซเบฅเบฒเบเบชเบดเบšเบžเบฑเบ™เบ‚เบญเบ‡เบกเบนเบ™เบ„เปˆเบฒเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ—เบตเปˆเบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เบฅเบนเบเบ„เป‰เบฒ. เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบเบฑเปˆเบ™เบ•เบญเบ‡เบญเบญเบเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบˆเบฒเบเป‚เบ•เบ™เบ‚เบญเบ‡เบเบธเปˆเบ™เปเบฅเบฐ silt, เบ„เบทเบเบฑเบ™เบเบฑเบš flamingos เป€เบฎเบฑเบ”เปƒเบ™เบญเบฒเบซเบฒเบ™เบ—เปˆเบฝเบ‡.

Vela โ†’ cache เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐเบชเปเบฒเบฅเบฑเบšเบŠเบธเบ”เป€เบงเบฅเบฒเปเบฅเบฐเบญเบทเปˆเบ™เป†

เบฅเบฑเบเบชเบฐเบ™เบฐเบžเบดเป€เบชเบ”เบ‚เบญเบ‡ flamingos เปเบกเปˆเบ™เบ›เบฒเบเบซเบกเบฒเบเป‚เบ„เป‰เบ‡เบฅเบปเบ‡เบฅเบธเปˆเบกเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เบžเบงเบเบกเบฑเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบญเบฒเบซเบฒเบ™เบˆเบฒเบเบ™เป‰เปเบฒเบซเบผเบทเบ‚เบตเป‰เบ•เบปเบก.
 - เบงเบดเบเบดเบžเบตเป€เบ”เบ

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบซเปเบชเบฐเบซเบกเบธเบ”เป„เบ”เป‰เป€เบเบตเบ” Vela, เป€เบŠเบดเปˆเบ‡เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ cache เบ‚เบญเบ‡เบฅเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบ„เปˆเบฒเบซเบผเบฒเบเปƒเบ™เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰. เบžเบฒเบเปƒเบ•เป‰เบเบฒเบญเบฑเบ”เบ›เบฒเบเบกเบปเบ”เบฅเบนเบ, เบกเบฑเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบšเปเปˆเบ”เบต เปเบฅเบฐเบฅเป‰เบฒเบชเบฐเป„เบซเบกเบญเบญเบเปƒเบ™เบเบฒเบ™เบšเบดเบ™, เปเบฅเบฐเบเบฑเบ‡เปƒเบซเป‰เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบซเบฅเป‰เบฒเบชเบธเบ” N เบ„เปˆเบฒเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เบต (เบ„เบนเปˆเบชเบฐเบเบธเบ™เป€เบ‡เบดเบ™, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ).

เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบเปเบฒเบญเบฑเบ”เบ•เบฒเบชเปเบฒเบฅเบฑเบšเบชเบฒเบกเบ„เบนเปˆเบชเบฐเบเบธเบ™เป€เบ‡เบดเบ™. เบ„เปเบฒเบ™เบดเบเบฒเบกเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ” Vela เป€เบžเบทเปˆเบญโ€‹เป€เบเบฑเบšโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เบชเบฐโ€‹เบ–เบฒโ€‹เบ™เบฐโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹เบกเบฑเบ™โ€‹เบˆเบฐโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบ„เบทโ€‹เปเบ™เบงโ€‹เบ™เบตเป‰โ€‹:

defmodule Pairs do
  use Vela,
    eurusd: [sorter: &Kernel.<=/2],
    eurgbp: [limit: 3, errors: 1],
    eurcad: [validator: Pairs]

  @behaviour Vela.Validator

  @impl Vela.Validator
  def valid?(:eurcad, rate), do: rate > 0
end

เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบกเบนเบ™เบ„เปˆเบฒ

Vela.put/3 เบŸเบฑเบ‡เบŠเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปƒเบ™เบฅเปเบฒเบ”เบฑเบš:

  • เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ” validator เบเปˆเบฝเบงเบเบฑเบšเบกเบนเบ™เบ„เปˆเบฒ, เบ–เป‰เบฒเบซเบ™เบถเปˆเบ‡เบ–เบทเบเบเปเบฒเบ™เบปเบ” (เป€เบšเบดเปˆเบ‡เบšเบปเบ” เบเบฒเบ™เบเบงเบ”เบชเบญเบš เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰);
  • เบˆเบฐเป€เบžเบตเปˆเบกเบ„เปˆเบฒเบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เปเบ–เบงเบ‚เบญเบ‡เบ„เปˆเบฒเบ—เบตเปˆเบ”เบตเบ–เป‰เบฒเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เบซเบผเบทเปเบ–เบงเบšเปเบฅเบดเบเบฒเบ™. :__errors__ เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™;
  • เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบ–เป‰เบฒ sorter เบเปเบฒเบ™เบปเบ”เบชเปเบฒเบฅเบฑเบšเบเบฐเปเบˆเบ—เบตเปˆเปƒเบซเป‰, เบซเบผเบทเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเปƒเบชเปˆเบ„เปˆเบฒเบขเบนเปˆเบซเบปเบงเบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (LIFO, เป€เบšเบดเปˆเบ‡เบšเบปเบ” เบเบฒเบ™เบฎเบฝเบ‡เบฅเปเบฒเบ”เบฑเบš เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰);
  • เบˆเบฐเบ•เบฑเบ”เปเบ–เบงเบ•เบฒเบกเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต :limit เบœเปˆเบฒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡;
  • เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡ Vela.

iex|1 > pairs = %Pairs{}
iex|2 > Vela.put(pairs, :eurcad, 1.0)
#โ‡’ %Pairs{..., eurcad: [1.0], ...}
iex|3 > Vela.put(pairs, :eurcad, -1.0)
#โ‡’ %Pairs{__errors__: [eurcad: -1.0], ...}
iex|4 > pairs |> Vela.put(:eurusd, 2.0) |> Vela.put(:eurusd, 1.0)
#โ‡’ %Pairs{... eurusd: [1.0, 2.0]}

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™ Vela เบ›เบฐเบ•เบดเบšเบฑเบ” Access, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบซเบ™เป‰เบฒเบ—เบตเปˆเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ”เป†เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเป€เบฅเบดเบเป€เบŠเบดเปˆเบ‡เบˆเบฒเบเบชเบฒเบ™เบซเบ™เบนเป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡เบกเบนเบ™เบ„เปˆเบฒ. Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2, เปเบฅเบฐ Kernel.get_and_update_in/3.

เบเบฒเบ™เบเบงเบ”เบชเบญเบš

A validator เบชเบฒเบกเบฒเบ”เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™:

  • เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบžเบฒเบเบ™เบญเบเบ—เบตเปˆเบกเบตเบซเบ™เบถเปˆเบ‡ argument (&MyMod.my_fun/1), เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบกเบนเบ™เบ„เปˆเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบš;
  • เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™โ€‹เบžเบฒเบโ€‹เบ™เบญเบโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบชเบญเบ‡โ€‹เบเบฒเบ™โ€‹เป‚เบ•เป‰โ€‹เบ–เบฝเบ‡โ€‹, &MyMod.my_fun/2, เบ™เบฒเบ‡เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เบนเปˆ serie, value เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบš;
  • เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบกเบ”เบนเบ™ Vela.Validator;
  • เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ threshold, เปเบฅเบฐ - เบ—เบฒเบ‡เป€เบฅเบทเบญเบ - compare_by, เป€เบšเบดเปˆเบ‡เบšเบปเบ” เบ›เบฝเบšเบ—เบฝเบš เบ”เป‰เบฒเบ™เบฅเบธเปˆเบก.

เบ–เป‰เบฒเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เบกเบนเบ™เบ„เปˆเบฒเบˆเบฐเบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบžเบฒเบเปƒเบ•เป‰เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, tuple {serie, value} เป„เบ› :__errors_.

เบ›เบฝเบšเบ—เบฝเบš

เบ„เปˆเบฒเบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เปเบ–เบงเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เปƒเบ”. เป€เบžเบทเปˆเบญโ€‹เบชเบญเบ™ Vela เป€เบžเบทเปˆเบญเบ›เบฝเบšเบ—เบฝเบšเบžเบงเบเบกเบฑเบ™, เบกเบฑเบ™ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป‚เบญเบ™ compare_by เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปƒเบ™เบ„เปเบฒเบ™เบดเบเบฒเบกเบŠเบธเบ” (เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบ„เปˆเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เบฝเบšเบ—เบฝเบšเบเบฑเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ Kernel.</2); เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ™เบตเป‰เบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ” (Vela.value() -> number()). เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบกเบฑเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ & &1.

เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบœเปˆเบฒเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบเบฑเบšเบ„เปเบฒเบ™เบดเบเบฒเบกเปเบ–เบง comparator เบเบฒเบ™โ€‹เบ„เบดเบ”โ€‹เป„เบฅเปˆโ€‹เบ„เปˆเบฒ delta (min/max); เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เป‚เบ”เบเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ” Date.diff/2 เป€เบ›เบฑเบ™เบœเบนเป‰เบ›เบฝเบšเบ—เบฝเบš, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบš deltas เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบชเปเบฒเบฅเบฑเบšเบงเบฑเบ™เบ—เบต.

เบญเบตเบเบงเบดเบ—เบตเบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบกเปˆเบ™เบœเปˆเบฒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ threshold, เป€เบŠเบดเปˆเบ‡เบเปเบฒเบ™เบปเบ”เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบชเบนเบ‡เบชเบธเบ”เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เบ‚เบญเบ‡เบ„เปˆเบฒเปƒเบซเบกเปˆเบเบฑเบš {min, max} เป„เบฅเบเบฐเบซเปˆเบฒเบ‡. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบกเบฑเบ™เบ–เบทเบเบฅเบฐเบšเบธเป€เบ›เบฑเบ™เป€เบ›เบตเป€เบŠเบฑเบ™, เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰ comparatorเปเบ•เปˆเบเบฑเบ‡เปƒเบŠเป‰ compare_by. เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเป€เบเบ™เบชเปเบฒเบฅเบฑเบšเป€เบงเบฅเบฒเบงเบฑเบ™เบ—เบต, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบšเบธ compare_by: &DateTime.to_unix/1 (เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบ„เปˆเบฒเบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบก) เปเบฅเบฐ threshold: 1, เป€เบŠเบดเปˆเบ‡เบเปเปˆเปƒเบซเป‰เป€เบเบตเบ”เบ„เปˆเบฒเปƒเบซเบกเปˆเบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒเบžเบงเบเป€เบ‚เบปเบฒเบขเบนเปˆเปƒเบ™ ยฑband เป„เบฅเบเบฐเบซเปˆเบฒเบ‡เบˆเบฒเบเบ„เปˆเบฒเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™.

เบชเบธเบ”เบ—เป‰เบฒเบ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ Vela.equal?/2 เป€เบžเบทเปˆเบญเบ›เบฝเบšเบ—เบฝเบšเบชเบญเบ‡เปเบ„เบช. เบ–เป‰เบฒเบ„เปˆเบฒเบเปเบฒเบ™เบปเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆ equal?/2 เบซเบผเบท compare/2, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒ stupidly เปƒเบŠเป‰ ==/2.

เป„เบ”เป‰เบฎเบฑเบšเบ„เบธเบ™เบ„เปˆเบฒ

เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบฑเบเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เป‚เบ—เบซเบฒ Vela.purge/1, เป€เบŠเบดเปˆเบ‡เป€เบญเบปเบฒเบ„เปˆเบฒเบ—เบตเปˆเบฅเป‰เบฒเบชเบฐเป„เบซเบก (เบ–เป‰เบฒ validator เบœเบนเบเบกเบฑเบ”เบเบฑเบš timestamps). เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป‚เบ—เบซเบฒ Vela.slice/1เป€เบŠเบดเปˆเบ‡เบˆเบฐเบเบฑเบšเบ„เบทเบ™เบกเบฒ keyword เบ”เป‰เบงเบเบŠเบทเปˆเปเบ–เบงเป€เบ›เบฑเบ™เบเบฐเปเบˆ เปเบฅเบฐเบ„เปˆเบฒเบ—เบณเบญเบดเบ”, เบ„เปˆเบฒเบ•เบปเบงเบˆเบดเบ‡.

เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ get_in/2/pop_in/2 เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒเบเบฑเบšเบ„เปˆเบฒเปƒเบ™เปเบ•เปˆเบฅเบฐเปเบ–เบง.

Application

Vela เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบ›เบฑเบ™โ€‹เบ›เบฐโ€‹เป‚เบซเบเบ”โ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”โ€‹เป€เบ›เบฑเบ™โ€‹เบ–เบฒเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบˆเปเบฒโ€‹เบŠเบธเบ”โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เบ–เบฒโ€‹เบ™เบฐโ€‹เบเบฒเบ™โ€‹เบ‚เบฐโ€‹เบšเบงเบ™โ€‹เบเบฒเบ™โ€‹เป€เบŠเบฑเปˆเบ™โ€‹:โ€‹ GenServer/Agent. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบšเปเปˆโ€‹เป€เบ„เบตเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ„เบธเบ™โ€‹เบ„เปˆเบฒโ€‹เบซเบผเบฑเบโ€‹เบชเบนเบ” stale, เปเบฅเบฐโ€‹เป€เบžเบทเปˆเบญโ€‹เป€เบฎเบฑเบ”โ€‹เบชเบดเปˆเบ‡โ€‹เบ™เบตเป‰โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เบ‚เบฐโ€‹เบšเบงเบ™โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบ›เบธเบ‡โ€‹เปเบ•เปˆเบ‡โ€‹เบฅเบฑเบ” Vela, เบเบฑเบš validator เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰.

@impl Vela.Validator
def valid?(_key, %Rate{} = rate),
  do: Rate.age(rate) < @death_age

ะธ Vela.purge/1 quietly เป€เบญเบปเบฒเบ„เปˆเบฒ stale เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบธเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ„เบธเบ™เบ„เปˆเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเป‚เบ—เบซเบฒ Vela.slice/1, เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เบซเบผเบฑเบเบชเบนเบ”เปเบกเปˆเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ (เบŠเบธเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”), เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบชเบปเปˆเบ‡เบ„เบทเบ™เบกเบฑเบ™ - เบˆเบฑเบ”เบฎเบฝเบ‡เปเบฅเป‰เบง - เบ”เป‰เบงเบเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.

เบเบฒเบ™เป€เบเบฑเบšเบŠเบธเบ”เป€เบงเบฅเบฒเบกเบตเบ„เบงเบฒเบกเบชเบธเบ!

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™