Vela β†’ chosungira chanzeru cha mndandanda wanthawi ndi zina zambiri

Mu fintech, nthawi zambiri timafunika kukonza kuchuluka kwa ndalama zosinthira ndalama. Timapeza zambiri kuchokera kumagwero osiyanasiyana, ndipo aliyense wa iwo ali ndi lingaliro lake la momwe angasinthire mitengo yosinthira mawa, mawa, mwezi wamawa komanso zaka zitatu zikubwerazi. Ngati wina anganeneretu mitengo kulondola, ingakhale nthawi yotseka bizinesiyo ndikungosintha mopusa ndalama mmbuyo ndi mtsogolo. Magwero ena ndi odalirika, ena amapereka zinyalala zathunthu, zophatikizika zosowa za mfundo zolondola, koma kwa mabanja achilendo. Ntchito yathu ndikusanthula masauzande masauzande awa pa sekondi imodzi ndikuwona zomwe tingawonetse kwa makasitomala. Tiyenera kuchotsa mtengo wolondola kuchokera ku dothi ndi dothi lambiri, monga momwe flamingo amachitira pa nkhomaliro.

Vela β†’ chosungira chanzeru cha mndandanda wanthawi ndi zina zambiri

Chinthu china chapadera cha mbalamezi n'chakuti milomo yawo ikuluikulu yopindika pansi, imene imasefa chakudya m'madzi kapena m'matope.
 - Wiki

Motero laibulaleyo inabadwa Vela, yomwe imasunga posungira boma pazambiri zingapo pakanthawi kochepa. Pansi pa hood, imasefa deta yoyipa komanso yachikale pa ntchentche, komanso imapereka mwayi wopeza zaposachedwa N zovomerezeka pa kiyi iliyonse (ndalama ziwiri, kwa ife).

Tiyerekeze kuti timasonkhanitsa mitengo yamagulu atatu a ndalama. Kutanthauzira kosavuta Vela kusunga momwe zilili pano zidzawoneka motere:

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

Kusintha Makhalidwe

Vela.put/3 Ntchitoyi idzachita zotsatirazi motsatizana:

  • zidzachititsa validator pa mtengo, ngati wina wafotokozedwa (onani mutu Kutsimikizira pansipa);
  • adzawonjezera mtengowo pamzere wamakhalidwe abwino ngati kutsimikizika kudachita bwino, kapena pamzere wautumiki :__errors__ mwinamwake;
  • zipangitsa kusanja ngati sorter kutanthauziridwa pa kiyi yoperekedwa, kapena kungoyika mtengo wake pamutu wa mndandanda (ZOCHITIKA, onani mutu Zosintha pansipa);
  • idzachepetsa mzere molingana ndi parameter :limit adapatsira chilengedwe;
  • idzabwezeretsanso mawonekedwe osinthidwa 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]}

komanso Vela zida Access, kotero mutha kugwiritsa ntchito ntchito iliyonse yofananira pakukonzanso zozama kuchokera ku arsenal kuti musinthe makonda Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2ndipo Kernel.get_and_update_in/3.

Kutsimikizira

Wovomerezeka angatanthauzidwe motere:

  • ntchito yakunja ndi mfundo imodzi (&MyMod.my_fun/1), idzangolandira mtengo wotsimikizira;
  • ntchito yakunja yokhala ndi mfundo ziwiri, &MyMod.my_fun/2, apeza awiri serie, value kutsimikizira;
  • kukhazikitsa module Vela.Validator;
  • configuration parameter threshold, ndi - mwasankha - compare_by, onani mutu kuyerekezera pansipa.

Ngati kutsimikizika kwapambana, mtengowo umawonjezedwa pamndandanda pansi pa kiyi yofananira; apo ayi, tuple {serie, value} amapita ku :__errors_.

Kuyerekeza

Makhalidwe osungidwa m'mizere iyi akhoza kukhala chilichonse. Kuphunzitsa Vela kuyerekeza iwo, m'pofunika kusamutsa compare_by parameter mu tanthauzo la mndandanda (pokhapokha ngati zikhalidwe sizingafanane ndi muyezo Kernel.</2); chizindikiro ichi chiyenera kukhala chamtundu (Vela.value() -> number()). Mwa kusakhulupirika ndizosavuta & &1.

Komanso, mutha kupereka parameter ku tanthauzo la mzere comparator kuwerengera mitengo ya delta (min/max); mwachitsanzo, potumiza Date.diff/2 monga wofananira, mutha kupeza ma delta olondola amasiku.

Njira ina yabwino yogwirira ntchito ndikudutsa parameter threshold, chomwe chimatanthawuza kuchuluka kovomerezeka kwa mtengo watsopano {min, max} nthawi. Popeza imatchulidwa ngati peresenti, cheke sichigwiritsa ntchito comparatorkoma amagwiritsa ntchito compare_by. Mwachitsanzo, kuti mutchule mtengo wanthawi yamasiku, muyenera kufotokoza compare_by: &DateTime.to_unix/1 (kuti mupeze mtengo wokwanira) ndi threshold: 1, kupangitsa kuti zikhalidwe zatsopano ziloledwe pokhapokha ngati zili mkati Β±band pakapita nthawi kuchokera kumitengo yamakono.

Pomaliza, mungagwiritse ntchito Vela.equal?/2 kufananiza cache ziwiri. Ngati ma values ​​amafotokoza ntchito equal?/2 kapena compare/2, ndiye kuti ntchitozi zidzagwiritsidwa ntchito kufananitsa, apo ayi timagwiritsa ntchito mopusa ==/2.

Kupeza zofunika

Kukonza zomwe zikuchitika nthawi zambiri kumayamba ndikuyimba foni Vela.purge/1, zomwe zimachotsa zikhalidwe zakale (ngati validator womangidwa ku timestamps). Ndiye mukhoza kuyimba Vela.slice/1amene adzabwerera keyword okhala ndi mayina amizere ngati makiyi ndi oyamba, ofunika kwenikweni.

Mukhozanso kugwiritsa ntchito get_in/2/pop_in/2 kuti mupeze zotsika mtengo pamzere uliwonse.

Ntchito

Vela ikhoza kukhala yothandiza kwambiri ngati posungira nthawi muzochitika ngati GenServer/Agent. Sitikufuna kugwiritsa ntchito mfundo zakale zamaphunziro, ndipo kuti tichite izi timangosunga ndondomekoyi ndikukonzedwa ndi boma Vela, ndi zovomerezeka zomwe zikuwonetsedwa pansipa.

@impl Vela.Validator
def valid?(_key, %Rate{} = rate),
  do: Rate.age(rate) < @death_age

ΠΈ Vela.purge/1 amachotsa mwakachetechete zinthu zakale nthawi iliyonse yomwe tikufuna deta. Kuti mupeze zomwe timafunikira timangoyimba Vela.slice/1, ndipo pamene mbiri yaing'ono ya maphunziro ikufunika (mndandanda wonse), timangobweza - tasankhidwa kale - ndi mfundo zovomerezeka.

Wodala nthawi caching mndandanda!

Source: www.habr.com

Kuwonjezera ndemanga