Vela β†’ cache marani-tsaina ho an'ny andiam-potoana sy ny maro hafa

Ao amin'ny fintech, matetika isika dia tsy maintsy mamolavola angon-drakitra momba ny tahan'ny fifanakalozana vola be. Mahazo angon-drakitra avy amin'ny loharano samihafa izahay, ary samy manana ny heviny ny tsirairay amin'izy ireo amin'ny fomba hanoratana ny tahan'ny fifanakalozana ho an'ny rahampitso, ny ampitso, ny volana ho avy ary na dia ny telo taona manaraka aza. Raha misy afaka maminavina ny tahan'ny tsara, tonga ny fotoana hanakatonana ny raharaham-barotra ary hadalana hanova vola miverina sy miverina. Ny loharano sasany dia azo itokisana kokoa, ny sasany dia manome fako feno, miaraka amin'ny fampidirana tsy fahita firy amin'ny sanda marina, fa ho an'ny mpivady vahiny. Ny asantsika dia ny manasivana ireo soatoavina an'aliny isan-tsegondra ireo ary mamaritra izay tena haseho amin'ny mpanjifa. Mila manivana ny sanda marina iray amin'ny loto sy fotaka an-taoniny isika, toy ny ataon'ny flamingo amin'ny sakafo antoandro.

Vela β†’ cache marani-tsaina ho an'ny andiam-potoana sy ny maro hafa

Ny tena mampiavaka ny flamingo dia ny vavany miolikolika midina midina, izay manasivana sakafo amin'ny rano na fotaka.
 - Vicki

Noho izany dia teraka ny tranomboky Vela, izay mitahiry cache-panjakana ho an'ny sanda marobe amin'ny elanelan'ny fotoana voafaritra. Eo ambanin'ny satroka dia manivana ny angona ratsy sy lany andro amin'ny lalitra, ary manome fidirana amin'ny farany ihany koa N sanda voamarina ho an'ny fanalahidy tsirairay (mpiara vola, raha ny anay).

Andao atao hoe manangona taham-bola ho an'ny mpivady vola telo. Famaritana tsotra indrindra Vela mba hitahiry ny fanjakana ankehitriny dia ho toy izao:

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

Fanavaozana ny soatoavina

Vela.put/3 Ny asa dia hanao izao manaraka izao amin'ny filaharana:

  • hiteraka validator momba ny sandany, raha voafaritra ny iray (jereo ny toko fankatoavana ambany);
  • dia hanampy ny sanda na amin'ny laharan'ny sanda tsara raha toa ka nahomby ny fanamarinana, na amin'ny laharana serivisy :__errors__ raha tsy izany;
  • hiteraka fanasokajiana raha sorter voafaritra ho an'ny fanalahidy nomena, na hametraka fotsiny ny sanda eo amin'ny lohan'ny lisitra (LIFO, jereo ny toko manavaka ambany);
  • dia hanapaka ny laharana araka ny parameter :limit nampitaina tamin’ny famoronana;
  • hamerina ny rafitra nohavaozina 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]}

ihany koa Vela fitaovana Access, mba hahafahanao mampiasa ny fiasa manara-penitra ho an'ny rafitra fanavaozana lalina avy amin'ny arsenal mba hanavaozana ny soatoavina Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2, ary Kernel.get_and_update_in/3.

fankatoavana

Ny validator dia azo faritana ho:

  • asa ivelany miaraka amin'ny hevitra iray (&MyMod.my_fun/1), ny sandan'ny fanamarinana ihany no hahazoany;
  • asa ivelany misy hevitra roa, &MyMod.my_fun/2, hahazo tsiroaroa izy serie, value ho fanamarinana;
  • fampiharana module Vela.Validator;
  • masontsivana configuration threshold, ary - azo atao - compare_by, jereo ny toko Comparison eto ambany.

Raha mahomby ny fanamarinana, dia ampidirina amin'ny lisitra eo ambanin'ny fanalahidy mifanaraka amin'izany ny sanda; {serie, value} mandeha any :__errors_.

fampitahana

Ny soatoavina voatahiry ao anatin'ireo andalana ireo dia mety ho na inona na inona. Mampianatra Vela mba hampitahana azy ireo dia ilaina ny mamindra compare_by Parameter amin'ny famaritana andiany (raha tsy azo ampitahaina amin'ny fenitra ny soatoavina Kernel.</2); ity paramètre ity dia tokony ho karazana (Vela.value() -> number()). Amin'ny alàlan'ny default dia tsotra izany & &1.

Azonao atao koa ny mampita paramètre amin'ny famaritana andalana comparator kajy ny sanda delta (min/max); ohatra amin'ny fampitana Date.diff/2 amin'ny maha-mpampitaha anao dia azonao atao ny maka ny delta marina amin'ny daty.

Ny fomba iray hafa mety amin'ny asa dia ny mandalo parameter threshold, izay mamaritra ny tahan'ny ambony indrindra azo atao amin'ny sanda vaovao {min, max} elanelana. Satria voatondro ho isan-jato izy io, dia tsy ampiasaina ny seky comparatorfa mbola mampiasa compare_by. Ohatra, mba hamaritana ny sandan'ny tokonam-baravarana ho an'ny ora daty dia tsy maintsy mamaritra ianao compare_by: &DateTime.to_unix/1 (mba hahazoana sanda integer) ary threshold: 1, ka mahatonga ny soatoavina vaovao tsy avela afa-tsy raha ao izy ireo Β±band elanelam-potoana avy amin'ny sanda ankehitriny.

Farany, azonao ampiasaina Vela.equal?/2 hampitahana cache roa. Raha mamaritra asa iray ny soatoavina equal?/2 na compare/2, dia ho ampiasaina amin'ny fampitahana ireo fiasa ireo, raha tsy izany dia adaladala isika ==/2.

Mahazo soatoavina

Matetika manomboka amin'ny fiantsoana ny fanodinana ny fanjakana ankehitriny Vela.purge/1, izay manala ny soatoavina efa lany andro (raha validator mifamatotra amin'ny timestamps). Afaka miantso ianao avy eo Vela.slice/1izay hiverina keyword miaraka amin'ny anaran'ny laharana ho fanalahidy ary ny sanda tena izy no voalohany.

Azonao ampiasaina koa get_in/2/pop_in/2 ho an'ny fidirana ambany amin'ny sanda isaky ny andalana.

fampiharana

Vela dia mety ho tena ilaina ho toy ny andiam-potoana cache amin'ny dingana dingana toy ny GenServer/Agent. Tianay ny tsy hampiasa ny soatoavina efa lany tamingana, ary mba hanaovana izany dia tazominay fotsiny ny dingana miaraka amin'ny fampandehanan-draharaham-panjakana Vela, miaraka amin'ny validator aseho eto ambany.

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

ΠΈ Vela.purge/1 manala mangina ny soatoavina rehetra isaky ny mila ny angona. Mba hidirana amin'ny soatoavina tena izy dia antsoinay fotsiny Vela.slice/1, ary rehefa ilaina ny tantara kely momba ny fampianarana (ny andiany manontolo), dia averinay fotsiny izany - efa voalamina - miaraka amin'ny sanda voamarina.

Sambatra ny caching andiam-potoana!

Source: www.habr.com

Add a comment