Vela → smart cache maka usoro oge na ihe ndị ọzọ

Na fintech, anyị na-enwekarị ike ịhazi oke data ọnụego mgbanwe ego. Anyị na-enweta data sitere na isi mmalite dị iche iche, nke ọ bụla n'ime ha nwere echiche nke ya banyere otu esi eme ka ọnụego mgbanwe maka echi, ụbọchị echi, ọnwa na-abịa na ọbụna afọ atọ na-esote. Ọ bụrụ naanị mmadụ nwere ike ịkọ ọnụego nri, ọ ga-abụ oge imechi azụmahịa na dị nnọọ nzuzu na-agbanwe ego azụ na azụ. Ụfọdụ isi mmalite bụ ndị a pụrụ ịdabere na ya, ụfọdụ na-enye ihe mkpofu zuru oke, na-enwechaghị nsonye nke ihe fọrọ nke nta ka ọ bụrụ ụkpụrụ ziri ezi, mana maka ndị di na nwunye na-ekpo ọkụ. Ọrụ anyị bụ ịchacha ndị a iri puku kwuru iri puku ụkpụrụ kwa sekọnd na-ekpebi ihe kpọmkwem na-egosi ndị ahịa. Anyị kwesịrị ikpochapụ otu uru ziri ezi site na ọtụtụ unyi na silt, dị ka flamingos na-eme na nri ehihie.

Vela → smart cache maka usoro oge na ihe ndị ọzọ

Akụkụ pụrụ iche nke flamingos bụ nnukwu ọnụ ọnụ ha gbadara agbagọ, bụ́ nke ha na-eji na-esi na mmiri ma ọ bụ apịtị ekpocha nri.
 - Wiki

Ya mere a mụrụ ọbá akwụkwọ ahụ Vela, nke na-echekwa cache steeti maka ọtụtụ ụkpụrụ n'oge oge akọwapụtara. N'okpuru mkpuchi ahụ, ọ na-ehichapụ data ọjọọ na nke oge ochie na ofufe, ma na-enyekwa ohere ịnweta ndị ọhụrụ N ụkpụrụ kwadoro maka igodo ọ bụla (ego ụzọ abụọ, n'ọnọdụ anyị).

Ka anyị kwuo na anyị na-anakọta ọnụego maka ụzọ abụọ ego atọ. Nkọwa kacha dị mfe Vela iji chekwaa ọnọdụ dị ugbu a ọ ga-adị ka nke a:

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

Na-emelite ụkpụrụ

Vela.put/3 Ọrụ ahụ ga-eme ihe ndị a n'usoro:

  • ga-akpata validator na uru ahụ, ọ bụrụ na akọwapụtara otu (lee isi Nkwado n'okpuru);
  • ga-agbakwunye uru ma n'ahịrị nke ezigbo ụkpụrụ ma ọ bụrụ na nkwado ahụ gara nke ọma, ma ọ bụ na ahịrị ọrụ :__errors__ ma ọ bụghị ya;
  • ga-eme ka nhazi ma ọ bụrụ sorter kọwapụtara maka igodo enyere, ma ọ bụ ga-etinye uru naanị n'isi ndepụta ahụ (LIFO, lee isiakwụkwọ Rttọ n'okpuru);
  • ga-ewepụtụ ahịrị dị ka oke :limit gafere n'elu okike;
  • ga-eweghachi usoro emelitere 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]}

Ọzọkwa Vela ngwa ngwa Access, yabụ ị nwere ike iji ọrụ ọkọlọtọ ọ bụla maka nrụpụta miri emi sitere na ngwa agha iji melite ụkpụrụ. Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2, na Kernel.get_and_update_in/3.

Nkwado

Enwere ike kọwapụta onye nkwado dị ka:

  • ọrụ mpụga na otu arụmụka (&MyMod.my_fun/1), ọ ga-enweta naanị uru maka nkwado;
  • ọrụ mpụga na arụmụka abụọ, &MyMod.my_fun/2, ọ ga-enweta otu ụzọ serie, value maka nkwado;
  • modul mmejuputa iwu Vela.Validator;
  • nhazi nhazi threshold, na - nhọrọ - compare_by, lee isiakwụkwọ Comparison n'okpuru.

Ọ bụrụ na nkwado na-aga nke ọma, a na-agbakwunye uru ahụ na ndepụta n'okpuru igodo kwekọrọ; ma ọ bụghị ya, tuple {serie, value} na-aga na :__errors_.

Ntụkọ

Ụkpụrụ echekwara na ahịrị ndị a nwere ike ịbụ ihe ọ bụla. Ịkụzi ihe Vela iji tụnyere ha, ọ dị mkpa ịnyefe compare_by oke na nkọwa usoro (ọ gwụla ma enweghị ike iji ụkpụrụ ndị ahụ tụnyere ọkọlọtọ Kernel.</2); oke a ga-abụrịrị ụdị (Vela.value() -> number()). Site na ndabara ọ dị mfe & &1.

Ọzọkwa, ị nwere ike ịfefe paramita na nkọwa ahịrị comparator iji gbakọọ ụkpụrụ delta (min/max); ọmụmaatụ, site na-ebufe Date.diff/2 dị ka comparator, ị nwere ike nweta ezi deltas maka ụbọchị.

Ụzọ ọzọ dị mma iji rụọ ọrụ bụ ịgafe paramita threshold, nke na-akọwa oke ikike ikike nke uru ọhụrụ ka {min, max} etiti oge. Ebe ọ bụ na akọwapụtara ya dị ka pasentị, nlele ahụ anaghị eji comparatorma ka na-eji compare_by. Dịka ọmụmaatụ, iji kọwapụta uru ọnụ ala maka oge ụbọchị, ị ga-ezipụta compare_by: &DateTime.to_unix/1 (iji nweta uru integer) na threshold: 1, na-eme ka a na-ahapụ ụkpụrụ ọhụrụ naanị ma ọ bụrụ na ha nọ ±band etiti oge site na ụkpụrụ dị ugbu a.

N'ikpeazụ, ị nwere ike iji Vela.equal?/2 iji tụnyere cache abụọ. Ọ bụrụ na ụkpụrụ na-akọwa ọrụ equal?/2 ma ọ bụ compare/2, mgbe ahụ, a ga-eji ọrụ ndị a tụnyere ya, ma ọ bụghị ya, anyị na-eji nzuzu eme ihe ==/2.

Inweta ụkpụrụ

Ịhazi steeti ugbu a na-amalitekarị site na ịkpọ oku Vela.purge/1, nke na-ewepụ ụkpụrụ ochie (ma ọ bụrụ validator ejikọtara ya timestamps). Ị nwere ike ịkpọ Vela.slice/1nke ga-alọghachi keyword nwere aha ahịrị dị ka igodo na nke mbụ, ezigbo ụkpụrụ.

Ị nwekwara ike iji get_in/2/pop_in/2 maka ohere dị ala na ụkpụrụ dị na ahịrị ọ bụla.

Ngwa

Vela может оказаться чрезвычайно полезной в качестве кеша временных рядов в стейте процесса типа GenServer/Agent. Anyị achọghị iji ụkpụrụ nkuzi stale, na ime nke a, anyị na-edobe usoro ahụ site na nhazi steeti Vela, na validator egosiri n'okpuru.

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

и Vela.purge/1 nwayo na-ewepu niile stale ụkpụrụ oge ọ bụla anyị chọrọ data. Iji nweta ezigbo ụkpụrụ anyị na-akpọ naanị Vela.slice/1, na mgbe a chọrọ obere akụkọ ihe mere eme nke usoro ahụ (usoro dum), anyị na-eweghachi ya - ewepụtalarị - na ụkpụrụ kwadoro.

Usoro nchịkọta oge obi ụtọ!

isi: www.habr.com

Tinye a comment