Vela β†’ smart cache yenguva yakatevedzana uye nezvimwe

Mufintech, isu tinowanzo fanirwa kugadzirisa yakakura mavhoriyamu emari yekuchinjana data data. Isu tinowana data kubva kwakasiyana masosi, uye imwe neimwe yadzo ine zano rayo rekuwedzera mareti ekuchinjana mangwana, zuva rinotevera mangwana, mwedzi unouya uye kunyangwe makore matatu anotevera. Dai mumwe munhu aigona kufanotaura rates zvakarurama, ingava nguva yekuvhara bhizinesi uye kungoshandura upenzi mari nekudzoka. Mamwe masosi anovimbika zvakanyanya, mamwe anopa marara akazara, asina kujairika inclusions yemhando chaiyo chaiyo, asi kune ekunze vakaroorana. Basa redu nderekusefa mune aya makumi ezviuru zvehunhu pasekondi uye kuona kuti ndezvipi chaizvo zvekuratidza kune vatengi. Isu tinofanirwa kusefa iyo yakakosha kukosha kubva kune matani etsvina uye silt, sezvinoita flamingo pakudya kwemasikati.

Vela β†’ smart cache yenguva yakatevedzana uye nezvimwe

Chinonyanya kusiyanisa maflamingo muromo wadzo muhombe wakakombamira pasi, waanosefa nawo zvokudya kubva mumvura kana mumatope.
 - Wiki

Saka raibhurari yakazvarwa Vela, iyo inochengeta cache yehurumende yehuwandu hwakawanda panguva yakatarwa yenguva. Pasi pehodhi, inosefa data rakashata uye rechinyakare panhunzi, uye zvakare inopa mukana kune ichangoburwa N akasimbiswa kukosha kune yega yega kiyi (mari pairi, mune yedu kesi).

Ngatitii tinounganidza mitero yemapeya matatu emari. Tsanangudzo yakapfava Vela kuchengetedza chimiro chazvino chinotaridzika seizvi:

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

Updating Values

Vela.put/3 Iyo function ichaita zvinotevera munhevedzano:

  • zvichakonzera validator pane kukosha, kana imwe ichitsanangurwa (ona chitsauko Validation pazasi);
  • ichawedzera kukosha kumutsara wezvakanaka zvakanaka kana kusimbiswa kwakabudirira, kana kumutsara webasa :__errors__ zvimwe;
  • zvichakonzera kurongedza kana sorter inotsanangurirwa kiyi yakapihwa, kana kuti inongoisa kukosha kumusoro kwechinyorwa (LIFO, ona chitsauko Kugadziriswa pazasi);
  • ichacheka mutsara zvichienderana neparameter :limit zvakapfuudzwa pakusikwa;
  • ichadzorera yakagadziridzwa chimiro 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]}

Uyewo Vela zvishandiso Access, saka iwe unogona kushandisa chero akajairika mabasa ekudzika ekuvandudza zvimiro kubva kune arsenal kugadzirisa maitiro Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2, uye Kernel.get_and_update_in/3.

Validation

A validator inogona kutsanangurwa se:

  • basa rekunze nenharo imwe (&MyMod.my_fun/1), inongogamuchira kukosha kwekusimbiswa;
  • basa rekunze rine nharo mbiri, &MyMod.my_fun/2, achawana peya serie, value kuitira kusimbiswa;
  • module kuita Vela.Validator;
  • configuration parameter threshold, uye - zvichida - compare_by, ona chitsauko kuenzanisa pasi.

Kana kusimbiswa kuchibudirira, kukosha kunowedzerwa kune iyo rondedzero pasi pekiyi inoenderana; kana zvisina kudaro, iyo tuple {serie, value} anoenda ku :__errors_.

Kuenzanisa

Izvo zvakakosha zvakachengetwa mumitsara iyi zvinogona kuva chero chinhu. Kudzidzisa Vela kuti uzvienzanise, zvakakosha kutamisa compare_by parameter mune inoteedzana tsananguro (kunze kwekunge iwo makoshero asingakwanise kuenzaniswa neyakajairwa Kernel.</2); iyi parameter inofanira kuva yerudzi (Vela.value() -> number()). By default zviri nyore & &1.

Zvakare, iwe unogona kupfuudza parameter kune mutsara tsananguro comparator kuverenga delta values ​​(min/max); semuenzaniso, nekutumira Date.diff/2 semuenzanisi, unogona kuwana iyo chaiyo deltas yemazuva.

Imwe nzira iri nyore yekushanda ndeyekupfuura parameter threshold, iyo inotsanangura iyo yakawanda inobvumirwa reshiyo yehutsva hutsva ku {min, max} interval. Sezvo inotsanangurwa sechikamu, cheki haishandisi comparatorasi achiri kushandisa compare_by. Semuenzaniso, kutsanangura kukosha kwechikumbaridzo chenguva dzemazuva, unofanirwa kutsanangura compare_by: &DateTime.to_unix/1 (kuwana kukosha kwakazara) uye threshold: 1, zvichiita kuti hutsva hutenderwe chete kana huri mukati Β±band interval kubva pazvino kukosha.

Pakupedzisira, unogona kushandisa Vela.equal?/2 kuenzanisa cache mbiri. Kana ma values ​​achitsanangura basa equal?/2 kana compare/2, ipapo mabasa aya achashandiswa kuenzanisa, zvikasadaro isu tinoshandisa nehupenzi ==/2.

Kuwana hunhu

Kugadzirisa mamiriro azvino kazhinji kunotanga nekufona Vela.purge/1, iyo inobvisa tsika dzekare (kana validator kusungirirwa ku timestamps) Unobva wafona Vela.slice/1iyo ichadzoka keyword ine mazita emitsara sekiyi uye yekutanga, chaiyo yakakosha.

Unogonawo kushandisa get_in/2/pop_in/2 kune yakaderera-level kuwana kune kukosha mumutsara wega wega.

Kushanda

Vela inogona kubatsira zvakanyanya senge nguva yakateedzana cache mune process state senge GenServer/Agent. Isu hatidi kusamboshandisa maitiro echinyakare, uye kuti tiite izvi tinongochengeta maitiro acho achigadziriswa Vela, nemugadziri anoratidzwa pazasi.

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

ΠΈ Vela.purge/1 chinyararire inobvisa ese echinyakare tsika pese patinoda iyo data. Kuti uwane iwo chaiwo maitiro isu tinongofona Vela.slice/1, uye kana nhoroondo diki yekosi ichidikanwa (iyo yese nhevedzano), tinongoidzosera - yakatorongwa - ine yakasimbiswa kukosha.

Inofara nguva yakatevedzana caching!

Source: www.habr.com

Voeg