Vela β†’ cache cerdas untuk seri waktu dan tidak hanya

Di fintech, kita sering harus memproses sejumlah besar data nilai tukar mata uang. Kami mendapatkan data dari sumber yang berbeda, dan masing-masing dari mereka memiliki ide sendiri tentang bagaimana memperkirakan angka untuk besok, lusa, bulan berikutnya, dan bahkan tiga tahun ke depan. Jika seseorang tahu bagaimana cara memprediksi program dengan benar, itu akan menjadi hal yang tepat untuk menutup bisnis dan dengan bodohnya mengubah uang bolak-balik. Beberapa sumber lebih dapat dipercaya, beberapa memasok sepenuhnya sampah, dengan inklusi yang jarang dari nilai yang hampir benar, tetapi untuk pasangan eksotis. Tugas kami adalah menyaring puluhan ribu nilai per detik ini dan menentukan apa yang harus ditunjukkan kepada pelanggan. Kita perlu menyaring satu-satunya nilai yang benar dari satu ton tanah dan lumpur, seperti flamingo lakukan saat makan malam.



Flamingo



Ciri khas khusus flamingo adalah paruhnya yang besar dan melengkung, dengan bantuan mereka menyaring makanan dari air atau lanau.

 -  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