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.

Vela → taisce cliste le haghaidh sraith ama agus níos mó

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.

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]}

Chomh maith leis sin Vela uirlisí Access, ionas gur féidir leat aon cheann de na feidhmeanna caighdeánacha a úsáid chun struchtúir dhomhain a nuashonrú ón Arsenal chun luachanna a nuashonrú Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2, agus Kernel.get_and_update_in/3.

Bailíochtú

Is féidir bailíochtóir a shainiú mar:

  • feidhm sheachtrach le argóint amháin (&MyMod.my_fun/1), ní bhfaighidh sé ach an luach le haghaidh bailíochtaithe;
  • feidhm sheachtrach le dhá argóint, &MyMod.my_fun/2, gheobhaidh sí péire serie, value le haghaidh bailíochtaithe;
  • cur i bhfeidhm modúl Vela.Validator;
  • 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?/2compare/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.

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

и 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.

caching sraith ama sásta!

Foinse: will.com

Add a comment