Vela → smart cache mo faasologa taimi ma isi mea

I le fintech, e masani ona tatou faʻatautaia le tele o voluma o faʻamatalaga o fesuiaiga o tupe. Matou te maua faʻamatalaga mai punaoa eseese, ma e tofu i latou ma lona lava manatu pe faʻafefea ona faʻaopopoina fua faatatau mo a taeao, aso a taeao, masina a sau ma e oʻo lava i le isi tolu tausaga. Ana mafai e se tasi ona vavalo fua faatatau saʻo, o le a oʻo i le taimi e tapunia ai le pisinisi ma naʻo le suia faʻavalevalea o tupe i tua ma luma. O nisi punaoa e sili atu ona faʻatuatuaina, o nisi e tuʻuina atu lapisi atoatoa, e seasea faʻapipiʻi e toetoe lava a saʻo, ae mo ulugalii mai fafo. O la matou galuega o le suʻeina lea o nei fiasefulu afe o tau i le sekone ma fuafua le mea tonu e faʻaalia i tagata faʻatau. E tatau ona tatou faamama ese le tau sa'o e tasi mai tone o palapala ma palapala, e pei lava ona faia e flamingo i le aoauli.

Vela → smart cache mo faasologa taimi ma isi mea

O se uiga iloga o flamingo o lo latou gutu lapo'a fa'alalo ifo i lalo, e fa'amama ai mea'ai mai le vai po'o le palapala.
 - Wiki

O lea na fanau ai le faletusi Vela, lea e teu ai se setete cache mo le tele o tau i taimi faʻapitoa. I lalo o le pulou, e faʻamama ai faʻamatalaga leaga ma le tuai i luga o le lele, ma maua ai foi avanoa i mea fou N tau faʻamaonia mo ki taʻitasi (paiga tupe, i la matou tulaga).

Fa'apea tatou te aoina fua faatatau mo tupe e tolu. Fa'amatalaga sili ona faigofie Vela e teu ai le tulaga o loʻo i ai nei o le a foliga pei o lenei:

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

Fa'afouina Tulaga Taua

Vela.put/3 Ole galuega ole a faia mea nei ile fa'asologa:

  • o le a mafua ai validator i luga o le tau, pe a faʻamatalaina se tasi (tagai i le mataupu Fa'amaoniga lalo);
  • o le a faʻaopoopoina le tau i le laina o tau lelei pe a manuia le faʻamaoniga, poʻo le laina tautua :__errors__ a leai;
  • o le a mafua ai ona faavasega pe afai sorter faʻamatalaina mo se ki tuʻuina atu, pe naʻo le tuʻuina o le tau i le ulu o le lisi (LIFO, tagai i le mataupu Faʻavasegaina lalo);
  • o le a tipi le laina e tusa ai ma le parakalafa :limit tuufaasolo atu i le foafoaga;
  • o le a toe faafoi le fausaga fou 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]}

Faʻaauau foi Vela fa'atino Access, o lea e mafai ai ona e faʻaogaina soʻo se galuega masani mo fausaga faʻafouina loloto mai le arsenal e faʻafou ai tau. Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2, ma Kernel.get_and_update_in/3.

Fa'amaoniga

E mafai ona faauigaina se validator e faapea:

  • galuega i fafo ma le finauga e tasi (&MyMod.my_fun/1), o le a naʻo le tau mo le faʻamaonia;
  • galuega i fafo ma finauga e lua, &MyMod.my_fun/2, o le a ia maua se paga serie, value mo le faamaoniga;
  • fa'atinoina o le module Vela.Validator;
  • fa'asologa fa'atulagaina threshold, ma - faitalia - compare_by, tagai i le mataupu faatusatusaga lalo.

Afai e manuia le faʻamaonia, e faʻaopoopo le tau i le lisi i lalo o le ki fetaui a le o lea, o le tuple {serie, value} alu i :__errors_.

Faatusatusaga

O tau o loʻo teuina i nei laina e mafai ona avea ma soʻo se mea. E aoao atu Vela e faʻatusatusa i latou, e tatau ona faʻafeiloaʻi compare_by parakalafa i le faʻasologa o faʻamatalaga (sei vagana ua le mafai ona faʻatusatusaina tau ma le tulaga masani Kernel.</2); e tatau ona fa'aituaiga lenei ta'oto (Vela.value() -> number()). I le tulaga masani e faigofie & &1.

E le gata i lea, e mafai ona e pasi se parakalafa i le faʻamatalaga laina comparator e fa'atatau le tau o delta (min/max); mo se faataitaiga, e ala i le auina atu Date.diff/2 i le avea ai ma se fa'atusatusaga, e mafai ona e mauaina fa'ailoga sa'o mo aso.

O le isi auala faigofie e galue ai o le pasia lea o se parakalafa threshold, lea e fa'amatala ai le fua fa'atatau maualuga fa'atagaina o le tau fou i {min, max} vaeluaga. Talu ai o loʻo faʻamaonia o se pasene, e le faʻaaogaina le siaki comparatorae faʻaaoga pea compare_by. Mo se faʻataʻitaʻiga, ina ia faʻamaonia se tau faʻavae mo taimi o aso, e tatau ona e faʻamaonia compare_by: &DateTime.to_unix/1 (ia maua se tau aofa'i) ma threshold: 1, ma mafua ai ona faʻatagaina ni tau fou pe a latou i totonu ±band vaeluaga mai tau o lo'o iai nei.

Mulimuli ane, e mafai ona e faʻaaogaina Vela.equal?/2 e fa'atusatusa ni fa'ailoga e lua. Afai o tau e faʻamatalaina se galuega equal?/2 poʻo compare/2, ona faʻaaogaina lea o nei galuega mo faʻatusatusaga, a leai tatou te faʻaoga valea ==/2.

Mauaina o tulaga faatauaina

O le faagasologa o le tulaga o iai nei e masani lava ona amata i le valaau Vela.purge/1, lea e aveesea ai tau le aoga (pe afai validator noatia i timestamps). Ona mafai lea ona e valaau Vela.slice/1lea o le a toe foi mai keyword fa'atasi ai ma igoa o laina e fai ma ki ma o le muamua, fa'atauga moni.

E mafai foi ona e faʻaaogaina get_in/2/pop_in/2 mo avanoa maualalo maualalo i tau i laina taʻitasi.

Talosaga

Vela e mafai ona aoga tele e pei o se fa'asologa o taimi fa'asologa i se tulaga fa'agasologa pei GenServer/Agent. Matou te mananaʻo e aua neʻi faʻaaogaina tulaga taua o le kosi, ma ia faia lenei mea matou te tausia le faʻagasologa ma le setete faʻatulagaina Vela, faʻatasi ai ma le faʻamaonia o loʻo faʻaalia i lalo.

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

и Vela.purge/1 aveese filemu uma tulaga taua i taimi uma tatou te manaomia ai faamatalaga. Ina ia maua le taua moni matou te valaʻau Vela.slice/1, ma pe a manaʻomia se tala faʻasolopito o le vasega (le faasologa atoa), matou te toe faʻafoʻi atu - ua uma ona faʻavasega - faʻatasi ai ma tau faʻamaonia.

Fiafia taimi fa'asologa fa'akomepiuta!

puna: www.habr.com

Faaopoopo i ai se faamatalaga