Vela β†’ ΠΏΠ°ΠΌΠ΅Ρ‚Π΅Π½ кСш Π·Π° врСмСнски сСрии ΠΈ повСќС

Π’ΠΎ fintech, чСстопати ΠΌΠΎΡ€Π°ΠΌΠ΅ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΡƒΠ²Π°ΠΌΠ΅ доста Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° Π΄Π΅Π²ΠΈΠ·Π½ΠΈΠΎΡ‚ курс. Π”ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ·Π²ΠΎΡ€ΠΈ ΠΈ сСкој ΠΎΠ΄ Π½ΠΈΠ² ΠΈΠΌΠ° своја идСја Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ Скстраполира Π΄Π΅Π²ΠΈΠ·Π½ΠΈΡ‚Π΅ курсСви Π·Π° ΡƒΡ‚Ρ€Π΅, Π·Π°Π΄ΡƒΡ‚Ρ€Π΅, слСдниот мСсСц, ΠΏΠ° Π΄ΡƒΡ€ΠΈ ΠΈ Π·Π° слСднитС Ρ‚Ρ€ΠΈ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. Ако само нСкој ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ΠΈ стапкитС ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° сС Π·Π°Ρ‚Π²ΠΎΡ€ΠΈ бизнисот ΠΈ само Π³Π»ΡƒΠΏΠ°Π²ΠΎ Π΄Π° сС ΠΌΠ΅Π½ΡƒΠ²Π°Π°Ρ‚ ΠΏΠ°Ρ€ΠΈΡ‚Π΅ Π½Π°ΠΏΡ€Π΅Π΄-Π½Π°Π·Π°Π΄. НСкои ΠΈΠ·Π²ΠΎΡ€ΠΈ сС посигурни, Π½Π΅ΠΊΠΎΠΈ снабдуваат цСлосно Ρ“ΡƒΠ±Ρ€Π΅, со Ρ€Π΅Ρ‚ΠΊΠΈ ΠΈΠ½ΠΊΠ»ΡƒΠ·ΠΈΠΈ Π½Π° рСчиси Ρ‚ΠΎΡ‡Π½ΠΈ врСдности, Π½ΠΎ Π·Π° Π΅Π³Π·ΠΎΡ‚ΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€ΠΎΠ²ΠΈ. ΠΠ°ΡˆΠ°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° Π΅ Π΄Π° Π³ΠΈ ΠΏΡ€ΠΎΡΠ΅Ρ˜ΡƒΠ²Π°ΠΌΠ΅ ΠΎΠ²ΠΈΠ΅ дСсСтици илјади врСдности Π²ΠΎ сСкунда ΠΈ Π΄Π° ΠΎΠ΄Ρ€Π΅Π΄ΠΈΠΌΠ΅ ΡˆΡ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π΄Π° ΠΈΠΌ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅. Π’Ρ€Π΅Π±Π° Π΄Π° ја Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°ΠΌΠ΅ Π΅Π΄Π½Π°Ρ‚Π° Ρ‚ΠΎΡ‡Π½Π° врСдност ΠΎΠ΄ Ρ‚ΠΎΠ½ΠΈ Π½Π΅Ρ‡ΠΈΡΡ‚ΠΎΡ‚ΠΈΡ˜Π° ΠΈ Ρ‚ΠΈΡšΠ°, исто ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ ΠΏΡ€Π°Π²Π°Ρ‚ Ρ„Π»Π°ΠΌΠΈΠ½Π³ΠΎ Π½Π° Ρ€ΡƒΡ‡Π΅ΠΊ.

Vela β†’ ΠΏΠ°ΠΌΠ΅Ρ‚Π΅Π½ кСш Π·Π° врСмСнски сСрии ΠΈ повСќС

ПосСбна карактСристика Π½Π° Ρ„Π»Π°ΠΌΠΈΠ½Π³ΠΎΡ‚ΠΎ Π΅ Π½ΠΈΠ²Π½ΠΈΠΎΡ‚ масивСн Π½Π°Π΄ΠΎΠ»Ρƒ Π·Π°ΠΎΠ±Π»Π΅Π½ ΠΊΠ»ΡƒΠ½, со кој Ρ‚ΠΈΠ΅ ја Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π°Ρ‚ Ρ…Ρ€Π°Π½Π°Ρ‚Π° ΠΎΠ΄ Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΊΠ°Π».
 - Π’ΠΈΠΊΠΈ

Π’Π°ΠΊΠ° сС Ρ€ΠΎΠ΄ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Vela, кој складира кСш Π½Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° Π·Π° повСќС врСдности Π²ΠΎ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ врСмСнски ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ. Под Ρ…Π°ΡƒΠ±Π°Ρ‚Π° Π³ΠΈ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π° Π»ΠΎΡˆΠΈΡ‚Π΅ ΠΈ застарСни ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ Π»Π΅Ρ‚, Π° исто Ρ‚Π°ΠΊΠ° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° пристап Π΄ΠΎ Π½Π°Ρ˜Π½ΠΎΠ²ΠΈΡ‚Π΅ 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.

Π’Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜Π°

Π’Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ΠΎΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° ΠΊΠ°ΠΊΠΎ:

  • Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° со Π΅Π΄Π΅Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ (&MyMod.my_fun/1), ќС ја Π΄ΠΎΠ±ΠΈΠ΅ само врСдноста Π·Π° Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜Π°;
  • Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° со Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ, &MyMod.my_fun/2, Ρ‚Π°Π° ќС Π΄ΠΎΠ±ΠΈΠ΅ ΠΏΠ°Ρ€ serie, value Π·Π° Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜Π°;
  • ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΌΠΎΠ΄ΡƒΠ» Vela.Validator;
  • ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° threshold, ΠΈ - ΠΏΠΎ ΠΆΠ΅Π»Π±Π° - compare_by, Π²ΠΈΠ΄ΠΈ поглавјС спорСдба ΠΏΠΎΠ΄ΠΎΠ»Ρƒ

Ако Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½Π°, врСдноста сС Π΄ΠΎΠ΄Π°Π²Π° Π½Π° листата ΠΏΠΎΠ΄ соодвСтниот ΠΊΠ»ΡƒΡ‡; Π²ΠΎ спротивно, Ρ‚ΠΎΡ€ΠΊΠ°Ρ‚Π° {serie, value} ΠΎΠ΄ΠΈ Π½Π° :__errors_.

Π‘ΠΏΠΎΡ€Π΅Π΄Π±Π°

ВрСдноститС Π·Π°Ρ‡ΡƒΠ²Π°Π½ΠΈ Π²ΠΎ ΠΎΠ²ΠΈΠ΅ Ρ€Π΅Π΄ΠΎΠ²ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ ΠΊΠ°ΠΊΠ²ΠΈ Π±ΠΈΠ»ΠΎ. Π”Π° ΠΏΡ€Π΅Π΄Π°Π²Π° Vela Π·Π° Π΄Π° Π³ΠΈ спорСдимС, Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π΅ Π΄Π° сС прСнСсат compare_by ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π²ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΡΠ΅Ρ€ΠΈΡ˜Π°Ρ‚Π° (освСн Π°ΠΊΠΎ врСдноститС Π½Π΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС спорСдат со стандардот Kernel.</2); овој ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΡ‚ (Vela.value() -> number()). Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΎ Π΅ Сдноставно & &1.

Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° прСнСсСтС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π½Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° Ρ€Π΅Π΄ΠΎΡ‚ comparator Π΄Π° сС прСсмСтаат врСдноститС Π½Π° Π΄Π΅Π»Ρ‚Π° (min/max); Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, со ΠΏΡ€Π΅Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Date.diff/2 ΠΊΠ°ΠΊΠΎ ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ Ρ‚ΠΎΡ‡Π½ΠΈΡ‚Π΅ Π΄Π΅Π»Ρ‚ΠΈ Π·Π° Π΄Π°Ρ‚ΡƒΠΌΠΈ.

Π”Ρ€ΡƒΠ³ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π΅ Π΄Π° ΠΏΠΎΠΌΠΈΠ½Π΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ threshold, кој Π³ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° максимално Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΈΠΎΡ‚ сооднос Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° врСдност Π΄ΠΎ {min, max} ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π». Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π΅ сС користи comparatorΠ½ΠΎ сСпак користи compare_by. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° Π΄Π° Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅ ΠΏΡ€Π°Π³ врСдност Π·Π° Π΄Π°Ρ‚ΡƒΠΌΠΈ Π²Ρ€Π΅ΠΌΠΈΡšΠ°, ΠΌΠΎΡ€Π° Π΄Π° Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅ compare_by: &DateTime.to_unix/1 (Π΄Π° сС Π΄ΠΎΠ±ΠΈΠ΅ Ρ†Π΅Π» Π±Ρ€ΠΎΡ˜ врСдност) ΠΈ threshold: 1, ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΡƒΠ²Π°Ρ˜ΡœΠΈ Π½ΠΎΠ²ΠΈ врСдности Π΄Π° сС Π΄ΠΎΠ·Π²ΠΎΠ»Π°Ρ‚ само Π°ΠΊΠΎ сС Π²Π½Π°Ρ‚Ρ€Π΅ Β±band ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΎΠ΄ Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΡ‚Π΅ врСдности.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ користитС Vela.equal?/2 Π΄Π° сС спорСдат Π΄Π²Π΅ кСшови. Ако врСдноститС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° equal?/2 ΠΈΠ»ΠΈ compare/2, Ρ‚ΠΎΠ³Π°Ρˆ ΠΎΠ²ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ќС сС користат Π·Π° спорСдба, ΠΈΠ½Π°ΠΊΡƒ Π½ΠΈΠ΅ Π³Π»ΡƒΠΏΠ°Π²ΠΎ користимС ==/2.

Π”ΠΎΠ±ΠΈΠ²Π°ΡšΠ΅ врСдности

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½Π°Ρ‚Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° ΠΎΠ±ΠΈΡ‡Π½ΠΎ Π·Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π° со ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΡšΠ΅ Vela.purge/1, со ΡˆΡ‚ΠΎ сС отстрануваат застарСнитС врСдности (Π°ΠΊΠΎ validator Π²Ρ€Π·Π°Π½ Π·Π° timestamps). ΠŸΠΎΡ‚ΠΎΠ° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС Ρ˜Π°Π²ΠΈΡ‚Π΅ Vela.slice/1која ќС сС Π²Ρ€Π°Ρ‚ΠΈ keyword со имиња Π½Π° Ρ€Π΅Π΄ΠΎΠ²ΠΈ ΠΊΠ°ΠΊΠΎ ΠΊΠ»ΡƒΡ‡Π΅Π²ΠΈ ΠΈ ΠΏΡ€Π²ΠΈΡ‚Π΅, вистински врСдности.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ исто Ρ‚Π°ΠΊΠ° Π΄Π° користитС get_in/2/pop_in/2 Π·Π° пристап Π½Π° ниско Π½ΠΈΠ²ΠΎ Π΄ΠΎ врСдноститС Π²ΠΎ сСкој Ρ€Π΅Π΄.

ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°

Vela ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ исклучитСлно корисСн ΠΊΠ°ΠΊΠΎ кСш Π½Π° врСмСнски сСрии Π²ΠΎ процСсна ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° ΠΊΠ°ΠΊΠΎ GenServer/Agent. НиС сакамС никогаш Π΄Π° Π½Π΅ користимС застарСни врСдности Π½Π° курсот, Π° Π·Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ Ρ‚ΠΎΠ°, Сдноставно Π³ΠΎ ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°ΠΌΠ΅ процСсот со ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Vela, со Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°Π½ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ.

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

ΠΈ Vela.purge/1 Ρ‚ΠΈΠ²ΠΊΠΎ Π³ΠΈ отстранува ситС застарСни врСдности сСкој ΠΏΠ°Ρ‚ ΠΊΠΎΠ³Π° Π½ΠΈ Ρ‚Ρ€Π΅Π±Π°Π°Ρ‚ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅. Π—Π° Π΄Π° пристапимС Π΄ΠΎ вистинскитС врСдности, Сдноставно ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ Vela.slice/1, ΠΈ ΠΊΠΎΠ³Π° Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° ΠΌΠ°Π»Π° ΠΈΡΡ‚ΠΎΡ€ΠΈΡ˜Π° Π½Π° курсот (Ρ†Π΅Π»Π°Ρ‚Π° ΡΠ΅Ρ€ΠΈΡ˜Π°), Π½ΠΈΠ΅ Сдноставно ја Π²Ρ€Π°ΡœΠ°ΠΌΠ΅ - вСќС ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° - со ΠΏΠΎΡ‚Π²Ρ€Π΄Π΅Π½ΠΈ врСдности.

Π‘Ρ€Π΅ΡœΠ½ΠΎ ΠΊΠ΅ΡˆΠΈΡ€Π°ΡšΠ΅ Π½Π° врСмСнски сСрии!

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€