fintech ááœááºá áá»áœááºá¯ááºááá¯á·ááẠááœá±ááŒá±ážáá²ááŸááºááŸá¯ááŸá¯ááºážáá±áá¬á ááŒá®ážáá¬ážáá±á¬ááá¬áááᯠáááŒá¬áááá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠááá°áá®áá±á¬áááºážááŒá áºáá»á¬ážá០áá±áá¬ááá¯áááŸáááŒááŒá®áž áááºážááá¯á·áá áºáŠážá á®ááẠááááºááŒááºá ááááºáá«á áá±á¬ááºáááŸáá·áº áá±á¬ááºáááºáá¯á¶ážááŸá áºá¡ááœáẠááœá±áá²ááŸá¯ááºážáá»á¬ážááᯠáááºáá²á·ááá¯á· áá±á«ááºážááá·áºááááºááá¯ááá·áº ááá¯ááºááá¯ááºá áááºáá°ážááŸááááºá ááŸá¯ááºážáá¬ážáá»á¬ážááᯠáá áºá á¯á¶áá áºáá±á¬ááºááᬠááá·áºááŸááºážááá¯ááºáá»áŸáẠááŸááºáááºá áœá¬á áá¯ááºáááºážááááºáá»áááºáá±á¬ááºááŒá® á ááœá±á¡áá±á«ááºáá±á«ááºá¡áá«áá«ááŒá±á¬ááºážáá¯á¶áá«áá²á á¡áá»áá¯á·áá±á¬áááºážááŒá áºáá»á¬ážááẠááá¯ááá¯áá¯á¶ááŒááºá áááºáá»áááŒá®áž á¡áá»áá¯á·ááŸá¬ ááŸááºáááºáá±á¬áááºááá¯ážáá»á¬ážáá®ážáá«ážáá«áááºááá·áº ááŸá¬ážáá«ážáá±á¬ á¡ááŸáá¯ááºáá»á¬ážááᯠááŒáá·áºá á¯á¶á áœá¬áá±ážáá±á¬ááºáá±á¬áºáááºáž áá°ážááŒá¬ážáááºážááŒá¬ážáá±á¬á á¯á¶ááœá²áá»á¬ážá¡ááœááºááŒá áºáááºá áá»áœááºá¯ááºááá¯á·áá¡áá¯ááºááŸá¬ áá áºá áá¹ááá·áºáá»áŸáẠáá±á¬ááºážááŸáá·áºáá»á®áá±á¬ áááºááá¯ážáá»á¬ážááᯠááœá²ááŒááºážá áááºááŒá¬ááŒá®áž áá±á¬ááºáááºáá»á¬ážá¡á¬áž ááŒááááá·áºá¡áá¬ááᯠá¡ááá¡áá» áá¯á¶ážááŒááºáááºááŒá áºáááºá áá±á·áááºá á¬ááŸá¬ Flamingos áá¯ááºáááá¯áá»áá¯áž á¡áá áºá¡ááŒá±ážáá²á· áá¯ááºážááœá±ááá± ááŸááºáááºáá²á·áááºááá¯ážáá áºáá¯ááᯠá á áºáá¯ááºááá¯á·ááá¯áá«áááºá
Flamingos á á¡áá°ážáá°ážááŒá¬ážáá»ááºááŸá¬ áááºážááá¯á·á ááŒá®ážáá¬ážáá±á¬ á¡á±á¬ááºááá¯ááºážááœá±ážáá±á¬ ááŸá¯ááºáá®ážááŒá áºááŒá®áž áááºážááá¯á·ááẠá¡á á¬áá»á¬ážááᯠáá± ááá¯á·ááá¯áẠááœáŸá¶á·áá»á¬ážá០á á áºáá¯ááºáá±ážáá«áááºá
-Vicky
áá®ááá¯áá²á· á
á¬ááŒáá·áºááá¯ááºááœá± áá±á«áºáá±á«ááºáá¬áááºá Vela
áá»áœááºá¯ááºááá¯á·ááẠááœá±ááŒá±ážá¡ááœá²áá¯á¶ážáá»áá¯ážá¡ááœáẠááŸá¯ááºážáá¬ážáá»á¬ážááᯠáá±á¬ááºáá¶áááºááá¯áá«á
áá¯á·á á¡ááá¯ážááŸááºážáá¯á¶ážá¡áááá¹áá«áẠ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__
ááá¯ááºáááºá - sorting áá¯ááºáá»áŸáẠááŒá
áºá
á±áááºá
sorter
áá±ážáá¬ážáá±á¬áá±á¬á·á¡ááœáẠáááºááŸááºáá¬ážáá±á¬ ááá¯á·ááá¯áẠáááºááá¯ážááᯠá á¬áááºážááá±á«ááºážááœáẠááá¯ážááá¯ážáá¬ážááẠ(LIFOá¡áááºážááá¯ááŒáá·áºáá«á sorting á¡á±á¬ááºááœááº); - ááá·áºáááºáá»ááºáá»á¬ážá¡á á¡áááºážááᯠááŒááºáá±á¬ááºáááºááŒá
áºáááºá
: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
ááá¬ážáááºááŸá¯á¡ááœááº; - module á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá
;Vela.Validator
- configuration ááá·áºáááºáá»ááº
threshold
ááŸáá·áº - ááœá±ážáá»ááºááá¯ááºááẠ-compare_by
á¡áááºážááá¯ááŒáá·áºáá«á ááŸáá¯ááºážááŸááºááŸá¯ á¡á±á¬ááºááœááºáá±á¬áºááŒáá¬ážáá±á¬á
á¡áááºááŒá¯ááŒááºážá¡á±á¬ááºááŒááºáá«áá áááºááá¯ááºáá±á¬áá±á¬á·á¡á±á¬ááºááœáẠá
á¬áááºážáá²ááá¯á· áááºááá¯ážááᯠáá±á«ááºážááá·áºáááºá ááá¯á·ááá¯ááºáá«á tuple {serie, value}
ááœá¬ážááẠ:__errors_
.
ááŸáá¯ááºážááŸááºááŸá¯
á€á¡áááºážáá»á¬ážááœáẠááááºážáááºážáá¬ážáá±á¬ áááºááá¯ážáá»á¬ážááẠáá¬áááᯠááŒá
áºááá¯ááºáááºá áááºááŒá¬ážááẠVela
áááºážááá¯á·ááᯠááŸáá¯ááºážááŸááºáááºá ááœáŸá²ááŒá±á¬ááºážááẠááá¯á¡ááºáááºá compare_by
á
á®ážáá®ážáá¡áááá¹áá«ááºáááºááŸááºáá»ááºáá»á¬áž (áááºááá¯ážáá»á¬ážááá¯á
á¶ááŸáá·áºááŸáá¯ááºážááŸááºááááá«áá Kernel.</2
); á€áááºááŸááºáá»ááºááẠá¡áá»áá¯ážá¡á
á¬ážááŒá
áºááááºá (Vela.value() -> number())
. áá¯á¶ááŸááºá¡á¬ážááŒáá·áºáááºážáááºááá¯ážááŸááºážáááºá & &1
.
ááá¯á·á¡ááŒááºá áááºááẠá¡áááºážáááºááŸááºááŸá¯ááá¯á· áá±á¬ááºáá
áºáá¯ááᯠááŒááºáááºážááá¯ááºáááºá comparator
ááŒá
áºááá»áœááºážáá±á«áºáá±ááááºááá¯ážáá»á¬ážááᯠááœááºáá»ááºááẠ(min
/max
); á¥ááá¬á¡á¬ážááŒáá·áºá áá¯ááºááœáŸáá·áºááŒááºážá Date.diff/2
ááŸáá¯ááºážááŸááºáá°á¡áá±ááŒáá·áº áááºá
áœá²áá»á¬ážá¡ááœáẠááŸááºáááºáá±á¬ deltas ááᯠáááºáááá¯ááºáááºá
á¡áá¯ááºáá¯ááºááẠáá±á¬ááºáááºá¡áááºááŒá±áá±á¬áááºážáááºážááŸá¬ ááá·áºáááºáá»ááºáá
áºáá¯ááᯠáá»á±á¬áºááŒááºáááºááŒá
áºáááºá threshold
á¡áá
áºá០áááºááá¯ážá¡áá
áºá á¡áá»á¬ážáá¯á¶ážááœáá·áºááŒá¯ááá¯ááºáá±á¬ á¡áá»áá¯ážááᯠáááºááŸááºáááºá {min, max}
ááŒá¬ážáá¬áá áá¬ááá¯ááºááŸá¯ááºážá¡ááŒá
ẠáááºááŸááºáá¬ážáá±á¬ááŒá±á¬áá·áº áá»ááºáááºááŸááºááᯠá¡áá¯á¶ážáááŒá¯áá«á comparator
áá«áá±ááá·áº áá¯á¶ážáá±áá¯ááºážáá²á compare_by
. á¥ááá¬á¡á¬ážááŒáá·áºá áááºá
áœá²á¡áá»áááºáá»á¬ážá¡ááœáẠáá¶áá«ážáá¯á¶áááºááá¯ážááᯠáááºááŸááºáááºá áááºááẠáááºááŸááºááá«áááºá compare_by: &DateTime.to_unix/1
(ááááºážááŒáá·áºáááºááá¯ážááᯠááá°áááº) ááŸáá·áº threshold: 1
á¡áá
áºáá±á¬áááºááá¯ážáá»á¬ážááá¯ááŒá
áºáá±á«áºá
á±áááºááŸáááŸáá¬ááœáá·áºááŒá¯áá«á ±band
áááºááŸááááºááá¯ážáá»á¬ážá០ááŒá¬ážáá¬áá
áá±á¬ááºáá¯á¶ážá¡áá±áá²á· áááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá Vela.equal?/2
áááºááŸáºááŸá
áºáá¯ááᯠááŸáá¯ááºážááŸááºáááºá á¡áááºá áááºááá¯ážáá»á¬ážááᯠfunction áá
áºáᯠáááºááŸááºáá«áááºá equal?/2
ááá¯á·ááá¯áẠcompare/2
ááá¯á·áá±á¬áẠá€áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááŸáá¯ááºážááŸááºáááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áááá·áºáááºá ááá¯ááºáá«á áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºáá²á
áœá¬ á¡áá¯á¶ážááŒá¯áá«áááºá ==/2
.
áááºááá¯ážáá»á¬ážááá°ááŒááºážá
áááºááŸáá¡ááŒá±á¡áá±á¡á¬áž áá¯ááºáá±á¬ááºááŒááºážááẠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº áá±á«áºááá¯ááŒááºážááŒáá·áº á
áááºáááºá Vela.purge/1
á¡áá¯á¶ážáááŒá¯áá±á¬á·áá±á¬ áááºááá¯ážáá»á¬ážááᯠáááºááŸá¬ážáá±ážáá±á¬ (ááá¯áá«á validator
áá»áááºáá¬ážáááºá timestamps
) ááŒá®ážááẠáá¯ááºážáááºááá¯á·ááááºá Vela.slice/1
áááºááŒááºáá¬ááá²á keyword
áá±á¬á·áá»á¬ážááŸáá·áº áááá á¡ááŸááºááááºáááºááá¯ážáá»á¬ážá¡ááŒá
Ạá¡áááºážá¡áááºáá»á¬ážá
áááºáááºážáá¯á¶ážááá¯ááºááẠget_in/2
/pop_in/2
low-level access to the values ââin each row.
ááŒáŸá±á¬áá»ááŸá¬
Vela
process state ááŸá¬ time series cache á¡ááŒá
Ạá¡ááœááºá¡áá¯á¶ážáááºáá«áááºá GenServer
/Agent
. áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºááŒááºáá±á¬áááºáááºážáááºááá¯ážáá»á¬ážááᯠáááºáá±á¬á·ááŸá¡áá¯á¶ážáááŒá¯ááá¯áá«á áááºážááá¯áá¯ááºáá±á¬ááºáááºá¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáááºážá
ááºááᯠááá¯ááºáá¶áá±á¬áºá¡ááá·áºááŒáá·áº á
á®áá¶áá±á¬ááºááœááºáá¬ážáá¯á¶áá¬ááŒá
áºáááºá Vela
á¡á±á¬ááºááœááºáá±á¬áºááŒáá¬ážáá±á¬ validator ááŸáá·áºá¡áá°á
@impl Vela.Validator
def valid?(_key, %Rate{} = rate),
do: Rate.age(rate) < @death_age
О Vela.purge/1
áá±áá¬ááᯠááá¯á¡ááºááá¯ááºáž ááááºááááẠáááºááŸá¬ážáááºá á¡ááŸááºááááºáááºááá¯ážáá»á¬ážááá¯ááá°áááºáá»áœááºá¯ááºááá¯á·ááá¯ážááŸááºážá
áœá¬áá±á«áºááá¯áá«á Vela.slice/1
áááºáááºážááááá¯ááºážááŒá±á¬ááºážá¡áá±ážá
á¬áž (á
á®ážáá®ážáá
áºáá¯áá¯á¶áž) ááá¯á¡ááºáá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á·á áááºážááᯠá
á®áá¬ážááŒá®ážáá¬ážááŒá
áºáááº- ááŸááºáááºáá±á¬áááºááá¯ážáá»á¬ážááŒáá·áº ááŒááºáá±ážáá«áááºá
áá»á±á¬áºááœáŸááºááœááºá¡áá»áááºá á®ážáá®áž ááááºážáááºážááŒááºáž
source: www.habr.com