Vela → cache intelliġenti għal serje tal-ħin u aktar
Fil-fintech, ħafna drabi jkollna nipproċessaw volumi pjuttost massivi ta’ data dwar ir-rata tal-kambju tal-munita. Nirċievu data minn sorsi differenti, u kull wieħed minnhom għandu l-idea tiegħu ta’ kif jiġu estrapolati r-rati tal-kambju għal għada, wara għada, ix-xahar id-dieħel u anke t-tliet snin li ġejjin. Kieku xi ħadd jista' jbassar ir-rati korrett, ikun iż-żmien li tagħlaq in-negozju u sempliċement ibiddel il-flus b'mod stupidu 'l quddiem u lura. Xi sorsi huma aktar affidabbli, xi jfornu żibel komplut, b'inklużjonijiet rari ta 'valuri kważi korretti, iżda għal koppji eżotiċi. Ix-xogħol tagħna huwa li ngħarbel dawn l-għexieren ta 'eluf ta' valuri kull sekonda u niddeterminaw x'se nuru eżattament lill-klijenti. Għandna bżonn niffiltraw il-valur korrett wieħed minn tunnellati ta 'ħmieġ u ħama, bħalma jagħmlu l-fjamingi waqt l-ikla ta' nofsinhar.
Karatteristika speċjali li tiddistingwi l-fjamingi hija l-munqar massiv tagħhom mgħawweġ 'l isfel, li bih jiffiltraw l-ikel mill-ilma jew mit-tajn.
- Wiki
Hekk twieldet il-librerija Vela, li jaħżen cache tal-istat għal valuri multipli f'intervalli ta 'ħin speċifikati. Taħt il-barnuża, tiffiltra data ħażina u skaduta fuq il-fly, u tipprovdi wkoll aċċess għall-aħħar N valuri validati għal kull ċavetta (pari ta’ muniti, fil-każ tagħna).
Ejja ngħidu li niġbru rati għal tliet pari ta' muniti. Definizzjoni sempliċi Vela biex taħżen l-istat attwali se tidher xi ħaġa bħal din:
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
Aġġornament tal-Valuri
Vela.put/3 Il-funzjoni se tagħmel dan li ġej f'sekwenza:
se jikkawża validator fuq il-valur, jekk wieħed ikun definit (ara l-kapitlu Validazzjoni hawn taħt);
se żżid il-valur jew mar-ringiela ta 'valuri tajbin jekk il-validazzjoni kienet ta' suċċess, jew mar-ringiela tas-servizz :__errors__ inkella;
se jikkawża issortjar jekk sorter definit għal ċavetta partikolari, jew sempliċiment ipoġġi l-valur fil-kap tal-lista (LIFO, ara l-kapitlu Issortja hawn taħt);
se trim ir-ringiela skond il-parametru :limit għadda mal-ħolqien;
parametru tal-konfigurazzjoni threshold, u - b'għażla - compare_by, ara l-kapitlu paragun hawn taħt.
Jekk il-validazzjoni tirnexxi, il-valur jiżdied mal-lista taħt iċ-ċavetta korrispondenti inkella, it-tuple {serie, value} tmur għal :__errors_.
Tqabbil
Il-valuri maħżuna f'dawn ir-ringieli jistgħu jkunu xi ħaġa. Biex tgħallem Vela biex tqabbelhom, huwa meħtieġ li tittrasferixxi compare_by parametru fid-definizzjoni tas-serje (sakemm il-valuri ma jistgħux jitqabblu mal-istandard Kernel.</2); dan il-parametru għandu jkun tat-tip (Vela.value() -> number()). B'mod awtomatiku huwa sempliċi & &1.
Ukoll, tista 'tgħaddi parametru lid-definizzjoni tar-ringiela comparator biex tikkalkula l-valuri delta (min/max); pereżempju, billi tittrasmetti Date.diff/2 bħala komparatur, tista 'tikseb id-deltas korretti għad-dati.
Mod konvenjenti ieħor biex taħdem huwa li tgħaddi parametru threshold, li jiddefinixxi l-proporzjon massimu permissibbli tal-valur il-ġdid għal {min, max} intervall. Peress li huwa speċifikat bħala persentaġġ, il-kontroll ma jużax comparatoriżda xorta juża compare_by. Pereżempju, biex tispeċifika valur limitu għad-data ħinijiet, trid tispeċifika compare_by: &DateTime.to_unix/1 (biex tikseb valur sħiħ) u threshold: 1, li tikkawża valuri ġodda li jkunu permessi biss jekk ikunu ġewwa ±band intervall mill-valuri kurrenti.
Fl-aħħarnett, tista 'tuża Vela.equal?/2 biex tqabbel żewġ caches. Jekk il-valuri jiddefinixxu funzjoni equal?/2 jew compare/2, allura dawn il-funzjonijiet se jintużaw għall-paragun, inkella aħna stupidly nużaw ==/2.
Jkollna valuri
L-ipproċessar tal-istat attwali normalment jibda bis-sejħa Vela.purge/1, li tneħħi valuri skaduti (jekk validator marbut ma timestamps). Imbagħad tista' ċċempel Vela.slice/1li se jirritorna keyword b'ismijiet ta' ringieli bħala ċwievet u l-ewwel valuri attwali.
Tista 'wkoll tuża get_in/2/pop_in/2 għal aċċess ta 'livell baxx għall-valuri f'kull ringiela.
Applikazzjoni
Vela jista 'jkun estremament utli bħala cache ta' serje ta 'żmien fi stat ta' proċess bħal GenServer/Agent. Aħna rridu li qatt ma nużaw valuri tal-kors skaduti, u biex nagħmlu dan aħna sempliċement inżommu l-proċess bl-istat ipproċessat Vela, bil-validatur muri hawn taħt.
и Vela.purge/1 tneħħi bil-kwiet il-valuri skaduti kollha kull darba li għandna bżonn id-dejta. Biex taċċessa l-valuri attwali aħna sempliċement insejħu Vela.slice/1, u meta tkun meħtieġa storja żgħira tal-kors (is-serje kollha), aħna sempliċement nirritornawha - diġà magħżula - b'valuri validati.