Vela → snjall skyndiminni fyrir tímaraðir og fleira
Í fintech þurfum við oft að vinna töluvert magn af gjaldeyrisgögnum. Við fáum gögn frá mismunandi aðilum og hver þeirra hefur sína eigin hugmynd um hvernig eigi að framreikna gengi á morgun, daginn eftir, næsta mánuð og jafnvel næstu þrjú ár. Bara ef einhver gæti spáð fyrir um vexti rétt, það væri kominn tími til að loka fyrirtækinu og skipta bara heimskulega peningum fram og til baka. Sumar heimildir eru áreiðanlegri, sumar bjóða upp á algjört sorp, með sjaldgæfum innifalingum af næstum réttum gildum, en fyrir framandi pör. Okkar starf er að sigta í gegnum þessi tugþúsundir gilda á sekúndu og ákvarða hvað nákvæmlega á að sýna viðskiptavinum. Við þurfum að sía út eina rétta gildið úr tonnum af óhreinindum og silti, alveg eins og flamingóar gera í hádeginu.
Sérstakur sérkennandi eiginleiki flamingóa er stórfelldur boginn goggur þeirra, sem þeir sía mat úr vatni eða leðju með.
- Wiki
Þannig varð bókasafnið til Vela, sem geymir ástand skyndiminni fyrir mörg gildi með tilteknu millibili. Undir hettunni síar það út slæm og úrelt gögn á flugu og veitir einnig aðgang að nýjustu N staðfest gildi fyrir hvern lykil (gjaldmiðapör, í okkar tilviki).
Segjum að við söfnum gengi fyrir þrjú gjaldeyrispör. Einfaldasta skilgreiningin Vela til að geyma núverandi ástand mun það líta eitthvað svona út:
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
stillingarbreytu threshold, og - valfrjálst - compare_by, sjá kafla Samanburður hér að neðan.
Ef staðfesting tekst, er gildinu bætt við listann undir samsvarandi lykli; annars er túplið {serie, value} fer til :__errors_.
Samanburður
Gildin sem geymd eru í þessum línum geta verið hvað sem er. Að kenna Vela til að bera þær saman er nauðsynlegt að flytja compare_by breytu í röð skilgreiningu (nema ekki sé hægt að bera gildin saman við staðalinn Kernel.</2); þessi færibreyta verður að vera af gerðinni (Vela.value() -> number()). Sjálfgefið er það einfalt & &1.
Einnig er hægt að senda færibreytu í línuskilgreininguna comparator til að reikna delta gildi (min/max); til dæmis með því að senda Date.diff/2 sem samanburðartæki geturðu fengið rétta deltas fyrir dagsetningar.
Önnur þægileg leið til að vinna er að senda breytu threshold, sem skilgreinir hámarks leyfilegt hlutfall nýja gildisins til {min, max} millibili. Þar sem það er tilgreint sem prósenta, notar ávísunin ekki comparatoren notar samt compare_by. Til dæmis, til að tilgreina þröskuldsgildi fyrir dagsetningartíma, verður þú að tilgreina compare_by: &DateTime.to_unix/1 (til að fá heiltölugildi) og threshold: 1, sem veldur því að ný gildi eru aðeins leyfð ef þau eru inni ±band bil frá núverandi gildum.
Að lokum geturðu notað Vela.equal?/2 að bera saman tvö skyndiminni. Ef gildin skilgreina fall equal?/2 eða compare/2, þá verða þessar aðgerðir notaðar til samanburðar, annars notum við heimskulega ==/2.
Að fá gildi
Vinnsla núverandi ástands byrjar venjulega með því að hringja Vela.purge/1, sem fjarlægir úrelt gildi (ef validator bundinn við timestamps). Þú getur þá hringt Vela.slice/1sem mun koma aftur keyword með línunöfnum sem lyklum og fyrstu raungildunum.
Þú getur líka notað get_in/2/pop_in/2 fyrir aðgang á lágu stigi að gildunum í hverri röð.
umsókn
Vela getur verið mjög gagnlegt sem tímaraðar skyndiminni í ferli eins og GenServer/Agent. Við viljum aldrei nota gömul námskeiðsgildi og til að gera þetta höldum við einfaldlega ferlinu með vinnslu ríkisins Vela, með staðfestingartækinu sem sýnt er hér að neðan.
и Vela.purge/1 fjarlægir hljóðlega öll gömul gildi í hvert skipti sem við þurfum gögnin. Til að fá aðgang að raunverulegum gildum hringjum við einfaldlega Vela.slice/1, og þegar krafist er lítillar sögu námskeiðsins (heildaröðin), skilum við henni einfaldlega — þegar búið er að flokka — með staðfestum gildum.