Vela → taisce cliste le haghaidh sraith ama agus níos mó
I fintech, is minic a bhíonn orainn méideanna ollmhóra sonraí ráta malairte airgeadra a phróiseáil. Faighimid sonraí ó fhoinsí éagsúla, agus tá a smaoineamh féin ag gach ceann acu ar conas rátaí malairte a eachtarshuíomh don lá amárach, an lá tar éis an lae amárach, an mhí seo chugainn agus fiú na trí bliana amach romhainn. Mura bhféadfadh ach duine rátaí a thuar i gceart, bheadh sé in am an gnó a dhúnadh agus airgead a athrú go dúr anonn is anall. Tá roinnt foinsí níos iontaofa, soláthraíonn cuid acu truflais iomlán, le cuimsiú annamh de luachanna beagnach ceart, ach le haghaidh lánúineacha coimhthíocha. Is é an post atá againn ná na mílte luachanna seo a scagadh in aghaidh an tsoicind agus a chinneadh cad go díreach atá le taispeáint do chustaiméirí. Ní mór dúinn an t-aon luach ceart a scagadh amach as na tonnaí salachar agus siolta, díreach mar a dhéanann lasracha ag am lóin.
Gné shainiúil ar leith de na lasracha is ea a gob ollmhór cuartha síos, lena scagann siad bia as uisce nó láib.
- Wiki
Mar sin a rugadh an leabharlann Vela, a stórálann taisce stáit le haghaidh luachanna iolracha ag eatraimh ama sonraithe. Faoin gcochall, scagann sé sonraí olc agus as dáta ar an eitilt, agus soláthraíonn sé rochtain ar a dhéanaí freisin N luachanna bailíochtaithe do gach eochair (péirí airgeadra, inár gcás).
Ligean le rá go mbailímid rátaí ar feadh trí phéire airgeadra. Sainmhíniú is simplí Vela chun an staid reatha a stóráil beidh cuma mar seo air:
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
Luachanna á Nuashonrú
Vela.put/3 Déanfaidh an fheidhm na rudaí seo a leanas in ord:
cuirfidh faoi deara validator ar an luach, má shainmhínítear ceann amháin (féach caibidil Bailíochtú thíos);
cuirfidh sé an luach leis an tsraith luachanna maithe dá n-éireodh leis an mbailíochtú, nó leis an tsraith seirbhíse :__errors__ a mhalairt;
cuirfidh sórtáil faoi deara má sorter sainithe le haghaidh eochair ar leith, nó cuirfidh sé an luach ag ceann an liosta (LIFO, féach caibidil Sórtáil thíos);
Baile Átha Troim an tsraith de réir an pharaiméadar :limit a rith ar chruthú;
tabharfaidh sé an struchtúr nuashonraithe ar ais Vela.
paraiméadar cumraíochta threshold, agus - go roghnach - compare_by, féach caibidil Comparáid thíos.
Má éiríonn leis an mbailíochtú, cuirtear an luach leis an liosta faoin eochair chomhfhreagrach; murach sin, an tuple {serie, value} téann go :__errors_.
Comparáid
Is féidir na luachanna a stóráiltear sna sraitheanna seo a bheith rud ar bith. Múin Vela chun iad a chur i gcomparáid, tá sé riachtanach a aistriú compare_by paraiméadar i sainmhíniú na sraithe (mura féidir na luachanna a chur i gcomparáid leis an gcaighdeán Kernel.</2); caithfidh an paraiméadar seo a bheith de chineál (Vela.value() -> number()). De réir réamhshocraithe tá sé simplí & &1.
Chomh maith leis sin, is féidir leat paraiméadar a chur ar aghaidh chuig an sainmhíniú ró comparator chun luachanna delta a ríomh (min/max); mar shampla, trí tharchur Date.diff/2 mar chomparadóir, is féidir leat na deiltí cearta a fháil le haghaidh dátaí.
Bealach áisiúil eile le bheith ag obair ná pas a fháil i bparaiméadar threshold, a shainíonn an cóimheas uasta incheadaithe den luach nua go {min, max} eatramh. Ós rud é go bhfuil sé sonraithe mar chéatadán, ní úsáideann an seic comparatorach fós úsáideann compare_by. Mar shampla, chun luach tairsí a shonrú le haghaidh amanna dáta, ní mór duit a shonrú compare_by: &DateTime.to_unix/1 (chun luach slánuimhir a fháil) agus threshold: 1, rud a fhágann nach gceadófar luachanna nua ach amháin má tá siad isteach ±band eatramh ó na luachanna reatha.
Ar deireadh, is féidir leat é a úsáid Vela.equal?/2 chun comparáid a dhéanamh idir dhá caches. Má shainmhíníonn na luachanna feidhm equal?/2 nó compare/2, ansin úsáidfear na feidhmeanna seo le haghaidh comparáide, ar shlí eile bainimid úsáid as dúr ==/2.
Faigh luachanna
Tosaíonn próiseáil an staid reatha le glaoch de ghnáth Vela.purge/1, a bhaineann luachanna as feidhm (más rud é validator ceangailte le timestamps). Is féidir leat glaoch ansin Vela.slice/1a fhillfidh keyword le hainmneacha rónna mar eochracha agus an chéad, luachanna iarbhír.
Is féidir leat é a úsáid freisin get_in/2/pop_in/2 le haghaidh rochtana ar leibhéal íseal ar na luachanna i ngach ró.
Iarratas
Vela Is féidir a bheith thar a bheith úsáideach mar thaisce sraith ama i stát próiseas mar GenServer/Agent. Teastaíonn uainn gan úsáid a bhaint as seanluachanna cúrsaí riamh, agus chun é seo a dhéanamh ní gá dúinn ach an próiseas a choinneáil leis an stát próiseáilte Vela, leis an bhailitheoir a thaispeántar thíos.
и Vela.purge/1 go ciúin a bhaint de gach luach stale gach uair is gá dúinn na sonraí. Chun rochtain a fháil ar na luachanna iarbhír tugaimid go simplí Vela.slice/1, agus nuair a bhíonn stair bheag den chúrsa ag teastáil (an tsraith iomlán), ní dhéanaimid ach é a chur ar ais - curtha in eagar cheana féin - le luachanna bailíochtaithe.