En fintech, a menudo tenemos que procesar cantidades bastante masivas de datos sobre el tipo de cambio. Obtenemos datos de diferentes fuentes, y cada uno de ellos tiene su propia idea de cómo extrapolar las tasas para mañana, pasado mañana, el próximo mes e incluso los próximos tres años. Si alguien supiera predecir los cursos correctamente, sería correcto cerrar el negocio y cambiar estúpidamente el dinero de un lado a otro. Algunas fuentes son más confiables, algunas suministran completamente basura, con raras inclusiones de valores casi correctos, pero para parejas exóticas. Nuestro trabajo es examinar estas decenas de miles de valores por segundo y determinar qué mostrar a los clientes. Necesitamos filtrar el único valor correcto de una tonelada de tierra y limo, como lo hacen los flamencos en la cena.
Una característica distintiva especial de los flamencos es su pico masivo y curvado, con el que filtran los alimentos del agua o el cieno.
- 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
-
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
, ( ), — — .
!