Vela β cache adimenduna denbora serieetarako eta gehiagorako
Fintech-en, askotan moneta-truke-tasaren datu-bolumen nahiko masiboak prozesatu behar ditugu. Iturri ezberdinetatik jasotzen ditugu datuak, eta bakoitzak bere ideia du nola estrapolatu bihar, etzi, hurrengo hilabeterako eta baita hurrengo hiru urteetarako ere. Norbaitek tasak iragar ditzake behar bezala, negozioa ixteko eta ergelki dirua atzera eta aurrera aldatzeko garaia izango litzateke. Iturri batzuk fidagarriagoak dira, beste batzuk zabor osoa hornitzen dute, balio ia zuzenen sartze arraroekin, baina bikote exotikoentzat. Gure lana segundoko hamar mila balio hauek bahetzea eta bezeroei zer erakutsi zehazki zehaztea da. Balio zuzena iragazi behar dugu tona zikinkeria eta limoetatik, flamenkoek bazkarian egiten duten bezala.
Flamenkoen bereizgarri berezi bat beheranzko makurtuta dagoen moko handia da, eta horrekin janaria uretatik edo lokatzetatik iragazten dute.
- Vicki
Horrela sortu zen liburutegia Vela, balio anitzeko egoera-cachea gordetzen duena denbora-tarte zehatzetan. Kanpaiaren azpian, datu txarrak eta zaharkituak iragazten ditu hegalean, eta azkenerako sarbidea ere ematen du. N gako bakoitzeko baliozko balioak (moneta bikoteak, gure kasuan).
Demagun hiru moneta bikoteren tasak biltzen ditugula. Definiziorik errazena Vela uneko egoera gordetzeko, itxura hau izango du:
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
Balioak eguneratzea
Vela.put/3 Funtzioak honako hau egingo du sekuentzian:
eragingo du validator balioari buruz, bat definitu bada (ikus kapitulua Balioztatzea behean);
balioa gehituko dio balio onen errenkadari baliozkotzea arrakastatsua izan bada, edo zerbitzu errenkadan :__errors__ bestela;
ordenatzea eragingo badu sorter gako jakin baterako definitu edo, besterik gabe, balioa zerrendaren buruan jarriko du (LIFO, ikusi kapitulua ordenatzeko behean);
errenkada moztuko du parametroaren arabera :limit sorkuntzara pasatu;
konfigurazio-parametroa threshold, eta - aukeran - compare_by, ikusi kapitulua konparazioa azpian.
Balioztatzea arrakastatsua bada, balioa dagokion gakoaren azpian zerrendara gehitzen da; bestela, tupla {serie, value} doa :__errors_.
konparazio
Errenkada hauetan gordetako balioak edozein izan daitezke. Irakasteko Vela horiek alderatzeko, transferitu egin behar da compare_by seriearen definizioan parametroa (balioak estandararekin alderatu ezin badira izan ezik Kernel.</2); parametro honek motakoa izan behar du (Vela.value() -> number()). Berez sinplea da & &1.
Gainera, parametro bat pasa diezaiokezu errenkaden definizioari comparator delta balioak kalkulatzeko (min/max); adibidez, transmitituz Date.diff/2 konparatzaile gisa, daten delta zuzenak lor ditzakezu.
Lan egiteko beste modu eroso bat parametro bat pasatzea da threshold, balio berriaren gehienezko ratio onargarria definitzen duena {min, max} tartea. Ehuneko gisa zehazten denez, txekea ez da erabiltzen comparatorbaina oraindik erabiltzen du compare_by. Adibidez, data-orduetarako atalase-balio bat zehazteko, zehaztu behar duzu compare_by: &DateTime.to_unix/1 (balio oso bat lortzeko) eta threshold: 1, balio berriak sartzen badira bakarrik onartzen direla eraginez Β±band uneko balioetatik tartea.
Azkenik, erabil dezakezu Vela.equal?/2 bi cache alderatzeko. Balioek funtzio bat definitzen badute equal?/2 edo compare/2, orduan funtzio hauek alderatzeko erabiliko dira, bestela ergelkeriaz erabiltzen dugu ==/2.
Balioak lortzea
Uneko egoera prozesatzea normalean deiarekin hasten da Vela.purge/1, balio zaharkituak kentzen dituena (baldin eta validator lotuta timestamps). Orduan deitu dezakezu Vela.slice/1itzuliko dena keyword errenkaden izenak gako gisa eta lehenengoak, benetako balioak.
Erabil ditzakezu get_in/2/pop_in/2 errenkada bakoitzeko balioetarako maila baxuko sarbidea izateko.
Eskaera
Vela oso erabilgarria izan daiteke denbora serieko cache gisa prozesu egoera batean GenServer/Agent. Ez dugu inoiz erabili nahi ikastaro zaharkituen balioak, eta, horretarako, prozesua egoera prozesatuarekin mantentzen dugu Vela, behean agertzen den baliozkotzailearekin.
ΠΈ Vela.purge/1 Datuak behar ditugun bakoitzean balio zaharkituak lasai kentzen ditu. Deitu besterik ez dugu egiten benetako balioetara sartzeko Vela.slice/1, eta ikastaroaren historia txiki bat behar denean (serie osoa), besterik gabe itzuliko dugu -dagoeneko ordenatuta- baliozko balioekin.