Vela → Smart Cache fĂŒr Zeitreihen und nicht nur

In der Fintech-Branche mĂŒssen wir hĂ€ufig sehr große Mengen an Wechselkursdaten verarbeiten. Wir erhalten Daten aus verschiedenen Quellen, und jede von ihnen hat ihre eigene Vorstellung davon, wie die SĂ€tze fĂŒr morgen, ĂŒbermorgen, den nĂ€chsten Monat und sogar die nĂ€chsten drei Jahre extrapoliert werden können. Wenn jemand wusste, wie man Kurse richtig vorhersagtEs wĂ€re genau richtig, das GeschĂ€ft zu schließen und einfach dumm Geld hin und her zu wechseln. Einige Quellen sind vertrauenswĂŒrdiger, andere liefern komplett MĂŒll, mit seltenen EinschlĂŒssen von fast korrekten Werten, aber fĂŒr exotische Paare. Unsere Aufgabe ist es, diese Zehntausende von Werten pro Sekunde zu sichten und zu bestimmen, was den Kunden gezeigt werden soll. Wir mĂŒssen den einzig richtigen Wert aus einer Tonne Schmutz und Schlick herausfiltern, wie es Flamingos beim Abendessen tun.



Flamingo



Ein besonderes Unterscheidungsmerkmal von Flamingos ist ihr massiver, gebogener Schnabel, mit dem sie Lebensmittel aus Wasser oder Schlick filtern.

 -  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, ( ),  â€”  â€” .








!




All Articles