Vela β†’ khasnado caqli gal ah oo loogu talagalay taxanaha waqtiga iyo in ka badan

Fintech, inta badan waa inaan ka baaraandegi karnaa tiro aad u badan oo ah xogta sarrifka lacagta. Waxaan ka helnaa xog ilo kala duwan, mid kasta oo iyaga ka mid ahina wuxuu leeyahay fikrad u gaar ah sida loo soo saaro sicirka sarrifka berrito, maalin ka dib berri, bisha soo socota iyo xitaa saddexda sano ee soo socota. Haddii qof uun saadaalin karo qiimayaasha sax, waxa ay noqon lahayd waqtigii la xidhi lahaa ganacsiga oo kaliya si doqonnimo ah u beddelo lacagta hore iyo dibba. Ilaha qaarkood waa la isku halayn karaa, qaar baa keena qashin dhamaystiran, oo ay ku jiraan waxyaabo naadir ah oo ku dhow qiyam sax ah, laakiin loogu talagalay lammaanaha qalaad. Shaqadeenu waa inaan ka shaandheyno tobanaan kun oo qiimayaal ilbiriqsikiiba oo aan go'aaminno waxa saxda ah ee lagu muujinayo macaamiisha. Waxaan u baahannahay inaan ka shaandheyno midka saxda ah ee tan wasakhda iyo wasakhda ah, sida flamingos-ka ay sameeyaan xilliga qadada.

Vela β†’ khasnado caqli gal ah oo loogu talagalay taxanaha waqtiga iyo in ka badan

Sifada gaarka ah ee flamingos waa afkooda weyn ee hoos u qalloocan, kaas oo ay cuntada kaga sifeeyaan biyaha ama dhoobada.
 - Wiki

Sidaas ayey maktabaddu ku dhalatay Vela, kaas oo kaydiya khasnad dawladeed qiimayaal badan waqtiyo cayiman. Daboolka hoostiisa, waxay shaandheysaa xogta xun iyo kuwa duugoobay ee duulista, waxayna sidoo kale siisaa marin u helka ugu dambeeyay N qiimayaasha la ansixiyay ee fure kasta (lammaanaha lacagta, kiiskeena).

Aynu nidhaahno waxaanu u ururinay qiimayaasha saddex lammaane oo lacag ah. Qeexida ugu fudud Vela si loo kaydiyo xaaladda hadda jirta waxay u ekaan doontaa sidan:

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

Cusboonaysiinta Qiimaha

Vela.put/3 Shaqadu waxay samayn doontaa kuwan soo socda si isku xigta:

  • keeni doona validator xagga qiimaha, haddii mid la qeexay (eeg cutubka Xaqiijinta hoose);
  • waxay ku dari doontaa qiimaha mid ka mid ah safka qiyamka wanaagsan haddii ansaxinta lagu guuleysto, ama safka adeegga :__errors__ haddii kale;
  • waxay keeni doontaa kala saarid haddii sorter lagu qeexay furaha la bixiyay, ama si fudud ayuu qiimaha u dhigayaa madaxa liiska (LIFO, eeg cutubka Kala sooc hoose);
  • wuxuu jari doonaa safka si waafaqsan cabbirka :limit la dhaafo uunka;
  • soo celin doonaa qaab-dhismeedka la cusboonaysiiyay 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]}

Sidoo kale Vela hirgeliyo Access, si aad u isticmaali karto mid kasta oo ka mid ah hawlaha caadiga ah ee qaabdhismeedka cusboonaysiinta qoto dheer ee arsenal si aad u cusbooneysiiso qiimaha Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2, Iyo Kernel.get_and_update_in/3.

Xaqiijinta

Ansaxiyaha waxaa lagu qeexi karaa sida:

  • shaqada dibadda oo leh hal dood (&MyMod.my_fun/1), waxay heli doontaa oo kaliya qiimaha ansaxinta;
  • shaqada dibadda oo leh laba doodood, &MyMod.my_fun/2, waxay heli doontaa labo serie, value si loo ansixiyo;
  • module fulinta Vela.Validator;
  • halbeegga qaabeynta threshold, iyo - ikhtiyaari - compare_by, eeg cutubka Isbarbar hoose.

Haddii ansaxinta lagu guuleysto, qiimaha ayaa lagu daraa liiska hoos yimaada furaha u dhigma, haddii kale, tuple {serie, value} tagaa :__errors_.

Isbarbar dhigid

Qiimaha lagu kaydiyay safafkan ayaa noqon kara wax kasta. Inuu wax baro Vela si loo barbardhigo iyaga, waa lagama maarmaan in la wareejiyo compare_by halbeegga qeexida taxanaha ah (haddii aan qiimayaasha lala barbar dhigi karin heerka Kernel.</2; qiyaastani waa inay noqotaa nooc (Vela.value() -> number()). Sida caadiga ah waa sahlan tahay & &1.

Sidoo kale, waxaad u gudbin kartaa halbeeg qeexida safka comparator si loo xisaabiyo qiimaha delta (min/max; tusaale ahaan, gudbinta Date.diff/2 Is barbardhig ahaan, waxaad heli kartaa deltas sax ah ee taariikhaha.

Habka kale ee ku habboon ee lagu shaqeyn karo waa in la dhaafo qiyaasta threshold, kaas oo qeexaya saamiga ugu badan ee la oggol yahay ee qiimaha cusub ilaa {min, max} dhexda Maadaama lagu qeexay boqolkiiba, jeeggu ma isticmaalo comparatorlaakiin wali isticmaal compare_by. Tusaale ahaan, si aad u qeexdo qiimaha bilowga ee wakhtiyada tariikhda, waa inaad sheegtaa compare_by: &DateTime.to_unix/1 (si aad u heshid qiimaha isugeynta) iyo threshold: 1, taasoo keenaysa in qiimayaal cusub la oggolaado oo keliya haddii ay ku jiraan Β±band inta u dhaxaysa qiyamka hadda jira.

Ugu dambeyntii, waxaad isticmaali kartaa Vela.equal?/2 si loo barbardhigo laba khasnad. Haddii qiyamku qeexo shaqo equal?/2 ama compare/2, ka dibna hawlahan waxaa loo isticmaali doonaa isbarbardhigga, haddii kale waxaan u isticmaalnaa nacasnimo ==/2.

Helitaanka qiyamka

Ka-hortagga xaaladda hadda jirta inta badan waxay ku bilaabataa wacitaanka Vela.purge/1, kaas oo meesha ka saaraya qiyamka duugoobay (if validator ku xidhan timestamps). Markaa waad wici kartaa Vela.slice/1kaas oo soo laaban doona keyword oo leh magacyo saf ah furayaal iyo kuwa ugu horreeya, qiimaha dhabta ah.

Waad adeegsan kartaa get_in/2/pop_in/2 Helitaanka heerka hoose ee qiyamka saf kasta.

Codsiga

Vela waxay noqon kartaa mid aad waxtar u leh sida kayd taxane ah oo waqti ah oo ku jira xaalad nidaam sida GenServer/Agent. Waxaan dooneynaa inaanan waligeen isticmaalin qiyamka koorsada fadhiidka ah, si aan tan u sameynona waxaan si fudud ku ilaalinaa nidaamka iyadoo la raacayo habraaca gobolka Vela, oo leh ansaxiyaha hoos ku yaal.

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

ΠΈ Vela.purge/1 si aamusnaan leh u saaraya dhammaan qiyamka duugoobay mar kasta oo aan u baahanahay xogta. Si aad u hesho qiyamka dhabta ah waxaan si fudud u wacnaa Vela.slice/1, iyo marka taariikh yar oo koorsada loo baahdo (taxanaha oo dhan), waxaan si fudud u soo celineynaa - horeyba loo soocay - oo leh qiyam la ansixiyay.

Kaydinta taxanaha wakhtiga farxadda leh!

Source: www.habr.com

Add a comment