Na fintech, geralmente precisamos processar quantidades bastante massivas de dados de taxas de câmbio. Obtemos dados de diferentes fontes e cada um deles tem sua própria idéia de como extrapolar as taxas para amanhã, depois de amanhã, no próximo mês e até nos próximos três anos. Se alguém soubesse prever os cursos corretamente, seria correto encerrar os negócios e mudar estupidamente o dinheiro para frente e para trás. Algumas fontes são mais confiáveis, outras fornecem lixo completamente, com raras inclusões de valores quase corretos, mas para casais exóticos. Nosso trabalho é filtrar essas dezenas de milhares de valores por segundo e determinar o que mostrar aos clientes. Precisamos filtrar o único valor correto de uma tonelada de sujeira e lodo, como os flamingos fazem no jantar.

Uma caracterĂstica especial dos flamingos Ă© o seu bico maciço e curvado, com a ajuda do qual eles filtram os alimentos da água ou do lodo.
- wiki
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, and Kernel.get_and_update_in/3.
:
- (
&MyMod.my_fun/1), ; - ,
&MyMod.my_fun/2,serie, value; - ,
Vela.Validator; -
threshold, — —compare_by, . Comparison .
, , {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, ( ), — — .
- GitHub
- Hexdocs
!