Vela → tasgadan snasail airson sreath ùine agus barrachd

Ann am fintech, gu tric feumaidh sinn tòrr mòr de dhàta reata iomlaid airgead a phròiseasadh. Bidh sinn a’ faighinn dàta bho dhiofar thùsan, agus tha a bheachd fhèin aig gach fear dhiubh air mar as urrainn dhut ìrean iomlaid a chuir a-mach airson a-màireach, an latha às deidh a-màireach, an ath mhìos agus eadhon an ath thrì bliadhna. Mura b’ urrainn ach cuideigin ìrean ro-innse ceart, bhiodh an t-àm ann an gnìomhachas a dhùnadh agus dìreach airgead atharrachadh gu gòrach air ais is air adhart. Tha cuid de stòran nas earbsaiche, bidh cuid a 'solarachadh sgudal iomlan, le in-ghabhail tearc de luachan cha mhòr ceart, ach airson càraidean coimheach. Is e an obair againn a bhith a’ gluasad tro na deichean mhìltean de luachan gach diog agus faighinn a-mach dè dìreach a sheallas do luchd-ceannach. Feumaidh sinn an aon luach ceart a shìoladh a-mach à tonna de shalachar is silt, dìreach mar a bhios lasraichean a’ dèanamh aig lòn.

Vela → tasgadan snasail airson sreath ùine agus barrachd

Is e feart sònraichte sònraichte de flamingos am gob mòr lùbte sìos aca, leis am bi iad a’ sìoladh biadh bho uisge no poll.
 - Wiki

Mar sin rugadh an leabharlann Vela, a bhios a’ stòradh tasgadan stàite airson ioma luachan aig amannan sònraichte. Fon chochall, bidh e a’ sìoladh a-mach dàta dona agus seann-fhasanta air an itealan, agus cuideachd a’ toirt cothrom air an fheadhainn as ùire N luachan dearbhte airson gach iuchair (paidhrichean airgid, nar cùise).

Canaidh sinn gu bheil sinn a’ cruinneachadh ìrean airson trì paidhrichean airgid. Am mìneachadh as sìmplidh Vela gus an staid làithreach a stòradh seallaidh e rudeigin mar seo:

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

Ag ùrachadh luachan

Vela.put/3 Nì an gnìomh na leanas ann an sreath:

  • bheir validator air an luach, ma tha aon air a mhìneachadh (faic caibideil Dearbhadh gu h-ìosal);
  • cuiridh e an luach an dàrna cuid ris an t-sreath de luachan math ma bha an dearbhadh soirbheachail, no ris an t-sreath seirbheis :__errors__ air dhòigh eile;
  • bheir e seòrsachadh ma tha sorter air a mhìneachadh airson iuchair shònraichte, no dìreach cuiridh e an luach aig ceann na liosta (LIFO, faic caibideil Deasachadh gu h-ìosal);
  • gearraidh e an t-sreath a rèir a’ pharameter :limit seachad air a' chruthachadh ;
  • bheir e air ais an structar ùraichte 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]}

Cuideachd Vela innealan Access, gus an urrainn dhut gin de na gnìomhan àbhaisteach a chleachdadh airson structaran ùrachadh domhainn bhon arsenal gus luachan ùrachadh Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2, agus Kernel.get_and_update_in/3.

Dearbhadh

Faodar neach-dearbhaidh a mhìneachadh mar:

  • gnìomh taobh a-muigh le aon argamaid (&MyMod.my_fun/1), chan fhaigh e ach an luach airson dearbhadh;
  • gnìomh bhon taobh a-muigh le dà argamaid, &MyMod.my_fun/2, gheibh i paidhir serie, value airson dearbhadh;
  • buileachadh modal Vela.Validator;
  • paramadair rèiteachaidh threshold, agus - gu roghnach - compare_by, faic caibideil coimeas gu h-ìosal.

Ma tha an dearbhadh soirbheachail, thèid an luach a chur ris an liosta fon iuchair fhreagarrach; air neo, an tuple {serie, value} a' dol gu :__errors_.

Coimeas

Faodaidh na luachan a tha air an stòradh anns na sreathan sin a bhith mar rud sam bith. A theagasg Vela gus coimeas a dhèanamh riutha, feumar gluasad compare_by paramadair ann am mìneachadh an t-sreath (mura h-urrainnear na luachan a choimeas ris an ìre àbhaisteach Kernel.</2); feumaidh am paramadair seo a bhith de sheòrsa (Vela.value() -> number()). Gu gnàthach tha e sìmplidh & &1.

Cuideachd, faodaidh tu paramadair a thoirt don mhìneachadh loidhne comparator gus luachan delta obrachadh a-mach (min/max); mar eisimpleir, le bhith a’ tar-chur Date.diff/2 mar choimeas, gheibh thu na deltas ceart airson cinn-latha.

Is e dòigh goireasach eile air obair a dhol seachad air paramadair threshold, a tha a’ mìneachadh a’ cho-mheas ceadaichte as àirde den luach ùr gu {min, max} eadar-ama. Leis gu bheil e air a shònrachadh mar àireamh sa cheud, chan eil an t-seic a 'cleachdadh comparatorach ga chleachdadh fhathast compare_by. Mar eisimpleir, gus luach stairsneach a shònrachadh airson amannan cinn-latha, feumaidh tu a shònrachadh compare_by: &DateTime.to_unix/1 (gus luach iomlan fhaighinn) agus threshold: 1, ag adhbhrachadh gun tèid luachan ùra a cheadachadh a-mhàin ma tha iad a-staigh ±band eadar-ama bho na luachan làithreach.

Mu dheireadh, faodaidh tu a chleachdadh Vela.equal?/2 gus coimeas a dhèanamh eadar dà tasgadan. Ma tha na luachan a 'mìneachadh gnìomh equal?/2 no compare/2, an uairsin thèid na gnìomhan sin a chleachdadh airson coimeas, air neo bidh sinn a’ cleachdadh gu gòrach ==/2.

A 'faighinn luachan

Mar as trice bidh làimhseachadh na stàite gnàthach a’ tòiseachadh le gairm Vela.purge/1, a bheir air falbh luachan seann-fhasanta (ma tha validator ceangailte ri timestamps). Faodaidh tu an uairsin fònadh Vela.slice/1a thilleas keyword le ainmean sreath mar iuchraichean agus a’ chiad, fìor luachan.

Faodaidh tu cuideachd a chleachdadh get_in/2/pop_in/2 airson ruigsinneachd aig ìre ìosal air na luachan anns gach sreath.

Iarrtas

Vela faodaidh e a bhith air leth feumail mar thasglann sreath ùine ann an staid pròiseas mar GenServer/Agent. Tha sinn airson gun a bhith a’ cleachdadh seann luachan cùrsa gu bràth, agus airson seo a dhèanamh bidh sinn dìreach a’ cumail a’ phròiseas leis an stàit air a ghiullachd Vela, leis an neach-dearbhaidh gu h-ìosal.

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

и Vela.purge/1 gu sàmhach a’ toirt air falbh a h-uile luach sean a h-uile uair a dh’ fheumas sinn an dàta. Gus faighinn gu na fìor luachan a chanas sinn gu sìmplidh Vela.slice/1, agus nuair a tha feum air eachdraidh bheag den chùrsa (an t-sreath gu lèir), bidh sinn dìreach ga thilleadh - air a rèiteachadh mu thràth - le luachan dearbhte.

Tasgadh sreath ùine sona!

Source: www.habr.com

Cuir beachd ann