Vela β†’ i-smart cache yochungechunge lwexesha kunye nokunye

Kwi-fintech, kuye kufuneke siqhubekisele phambili umthamo omkhulu wedatha yezinga lotshintshiselwano lwemali. Sifumana idatha kwimithombo eyahlukeneyo, kwaye nganye kubo inombono wayo wendlela yokukhuphela amaxabiso otshintshiselwano ngomso, kusuku olulandelayo, kwinyanga ezayo nakwiminyaka emithathu ezayo. Ukuba umntu unokuqikelela amaxabiso kunene, bekuya kuba lixesha lokuvala ishishini kwaye nje ngobudenge utshintshe imali emva naphambili. Eminye imithombo ithembeke ngakumbi, eminye inikezela ngenkunkuma epheleleyo, kunye nokufakwa okunqabileyo kwamaxabiso aphantse achanekileyo, kodwa kwizibini ezingaqhelekanga. Umsebenzi wethu kukuhluza la mashumi amawaka exabiso ngomzuzwana kwaye sijonge ukuba yintoni kanye ekufuneka siyibonise kubathengi. Kufuneka sihluze ixabiso elinye elichanekileyo kwiitoni zokungcola kunye nentlenga, njengokuba iiflamingo zisenza kwisidlo sasemini.

Vela β†’ i-smart cache yochungechunge lwexesha kunye nokunye

Eyona nto yahlula ngokukhethekileyo iiflamingo ngumlomo wazo omkhulu ogobele ezantsi, ezihluza ngawo ukutya emanzini okanye eludakeni.
 - Wiki

Ngaloo ndlela ithala leencwadi lazalwa Vela, egcina i-cache yendawo yamaxabiso amaninzi ngexesha elichaziweyo. Ngaphantsi kwe-hood, ihluza idatha embi kunye neyexesha elidlulileyo kwi-fly, kwaye ibonelela ngokufikelela kweyamva nje N amaxabiso aqinisekisiweyo eqhosha ngalinye (izibini zemali, kwimeko yethu).

Masithi siqokelela amaxabiso eentlawulo ezintathu. Eyona ngcaciso ilula Vela ukugcina imeko yangoku izakujongeka ngolu hlobo:

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

Ukuhlaziya amaxabiso

Vela.put/3 Umsebenzi uya kwenza oku kulandelayo ngokulandelelana:

  • iya kubangela validator kwixabiso, ukuba enye ichaziwe (bona isahluko Ukuqinisekiswa ngezantsi);
  • iyakongeza ixabiso nokuba kumqolo wamaxabiso alungileyo ukuba uqinisekiso luphumelele, okanye kumqolo wenkonzo :__errors__ ngenye indlela;
  • izakubangela ukuhlelwa ukuba sorter ichazwe ngesitshixo esinikiweyo, okanye izakubeka nje ixabiso kwintloko yoluhlu (I-LIFO, bona isahluko Ukuhlelwa ngezantsi);
  • izakunquma umqolo ngokwe parameter :limit idluliselwe kwindalo;
  • izakubuyisela ulwakhiwo oluhlaziyiweyo 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]}

Kwakhona Vela izixhobo Access, ngoko ungasebenzisa nayiphi na imisebenzi eqhelekileyo yohlaziyo olunzulu lwezakhiwo ukusuka kwindawo yokugcina amaxabiso ukuhlaziya amaxabiso. Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2, yaye Kernel.get_and_update_in/3.

Ukuqinisekiswa

Umqinisekisi unokuchazwa njengo:

  • umsebenzi wangaphandle ngengxoxo enye (&MyMod.my_fun/1), iya kufumana kuphela ixabiso lokuqinisekiswa;
  • umsebenzi wangaphandle oneengxoxo ezimbini, &MyMod.my_fun/2, uza kufumana iperi serie, value ukuqinisekiswa;
  • ukuphunyezwa kwemodyuli Vela.Validator;
  • iparameter yoqwalaselo threshold, kwaye - uyazikhethela - compare_by, bona isahluko uthelekiso ngezantsi.

Ukuba ukuqinisekiswa kuphumelele, ixabiso longezwa kuluhlu phantsi kweqhosha elihambelanayo; kungenjalo, i-tuple {serie, value} iya ku :__errors_.

The lekiswa

Amaxabiso agcinwe kule miqolo anokuba nantoni na. Ukufundisa Vela ukuzithelekisa, kuyimfuneko ukudlulisa compare_by iparameter kwinkcazo yothotho (ngaphandle kokuba amaxabiso awanakuthelekiswa nomgangatho Kernel.</2); le parameter kufuneka ibe yodidi (Vela.value() -> number()). Ngokungagqibekanga ilula & &1.

Kwakhona, ungadlula iparameter kwinkcazo yomqolo comparator ukubala amaxabiso edelta (min/max); umzekelo, ngokusasaza Date.diff/2 njengomthelekisi, ungafumana i-deltas echanekileyo yemihla.

Enye indlela efanelekileyo yokusebenza kukudlula iparameter threshold, echaza umlinganiselo ophezulu ovumelekileyo wexabiso elitsha ukuya {min, max} isithuba. Ekubeni ichazwe njengepesenti, itshekhi ayisebenzisi comparatorkodwa usasebenzisa compare_by. Umzekelo, ukucacisa ixabiso le-threshold lamaxesha omhla, kufuneka ucacise compare_by: &DateTime.to_unix/1 (ukufumana inani elipheleleyo) kunye threshold: 1, ebangela ukuba amaxabiso amatsha avunyelwe kuphela ukuba angaphakathi Β±band isithuba ukusuka kumaxabiso angoku.

Ekugqibeleni, ungasebenzisa Vela.equal?/2 ukuthelekisa iicache ezimbini. Ukuba amaxabiso achaza umsebenzi equal?/2 okanye compare/2, ke le misebenzi iya kusetyenziselwa uthelekiso, kungenjalo sisebenzisa ngobubhanxa ==/2.

Ukufumana amaxabiso

Ukuqhubekekisa imeko yangoku kudla ngokuqala ngokufowuna Vela.purge/1, esusa amaxabiso aphelelwe lixesha (ukuba validator ibotshelelwe kwi timestamps). Ungafowuna ke Vela.slice/1eya kubuya keyword ngamagama omqolo njengezitshixo kunye neyokuqala, amaxabiso angawo.

Ungasebenzisa kwakhona get_in/2/pop_in/2 kunikezelo olukwinqanaba elisezantsi kumaxabiso kumqolo ngamnye.

Isicelo

Vela inokuba luncedo kakhulu njengoluhlu lwexesha cache kwimeko yenkqubo efana GenServer/Agent. Sifuna ukuba singaze sisebenzise iinqobo ezisemgangathweni zezifundo zakudala, kwaye ukwenza oku sigcina inkqubo kunye nenkqubo eqhutywe ngurhulumente Vela, kunye nesingqinisiso esiboniswe ngezantsi.

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

ΠΈ Vela.purge/1 ngokuthula isusa onke amaxabiso adala ngalo lonke ixesha sifuna idatha. Ukufikelela kumaxabiso akwenyani sifowuna ngokulula Vela.slice/1, kwaye xa kufunwa imbali encinci yekhosi (lonke uchungechunge), siyibuyisela ngokulula-esele ihleliwe-kunye namaxabiso aqinisekisiweyo.

Ixesha elimnandi caching!

umthombo: www.habr.com

Yongeza izimvo