Vela → bohlale cache bakeng sa letoto la nako le tse ling

Ho fintech, hangata re tlameha ho sebetsana le lintlha tse ngata haholo tsa sekhahla sa phapanyetsano ea chelete. Re fumana lintlha ho tsoa mehloling e fapaneng, 'me e' ngoe le e 'ngoe ea tsona e na le mohopolo oa eona oa mokhoa oa ho fetisa litefiso tsa phapanyetsano hosane, letsatsi le hlahlamang hosane, khoeli e tlang esita le lilemo tse tharo tse tlang. Hoja motho a ka bolela esale pele litefiso ka ho le letona, e ka ba nako ea ho koala khoebo le ho fetola chelete ka booatla pele le morao. Mehloli e meng e ka tšeptjoa haholoanyane, e meng e fana ka litšila tse felletseng, tse nang le li-inclusions tse sa tloaelehang tsa boleng bo batlang bo nepahetse, empa bakeng sa banyalani ba kantle ho naha. Mosebetsi oa rona ke ho hlahloba mashome a likete a boleng motsotsoana 'me re tsebe hore na re lokela ho bontša eng ho bareki. Re hloka ho sefa boleng bo le bong bo nepahetseng ho tsoa litoneng tsa litšila le seretse, joalo ka ha li-flamingo li etsa lijong tsa mots'eare.

Vela → bohlale cache bakeng sa letoto la nako le tse ling

Ntho e ikhethang e khethollang li-flamingo ke molomo oa tsona o moholo o kobehileng fatše, oo ka oona li sefang lijo metsing kapa seretseng.
 - Wiki

Kahoo laebrari e ile ea tsoaloa Vela, e bolokang cache ea mmuso bakeng sa litekanyetso tse ngata ka nako e behiloeng. Tlas'a hood, e sefa lintlha tse mpe le tse siiloeng ke nako ka fofa, hape e fana ka phihlello ea tsa morao-rao N boleng bo netefalitsoeng bakeng sa senotlolo ka seng (lipara tsa lichelete, molemong oa rona).

Ha re re re bokella litefiso tsa lipara tse tharo tsa chelete. Tlhaloso e bonolo Vela ho boloka boemo ba hona joale ho tla shebahala tjena:

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

Ho Nchafatsa Melao ea Boitšoaro

Vela.put/3 Mosebetsi o tla etsa tse latelang ka tatellano:

  • tla baka validator ka boleng, haeba e hlalosoa (sheba khaolo Netefatso ka tlase);
  • e tla eketsa boleng ebang ke mola oa boleng bo botle haeba netefatso e atlehile, kapa moleng oa litšebeletso :__errors__ ho seng joalo;
  • e tla etsa hore ho hlophisoe haeba sorter e hlalositsoe bakeng sa senotlolo se fanoeng, kapa e tla beha boleng hloohong ea lenane (LIFO, bona khaolo Ho hlophisa ka tlase);
  • e tla fokotsa mola ho latela parameter :limit e fetiselitsoeng pōpong;
  • e tla khutlisa sebopeho se ntlafalitsoeng 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]}

Hape Vela lisebelisoa Access, kahoo o ka sebelisa efe kapa efe ea mesebetsi e tloaelehileng bakeng sa meaho ea ntlafatso e tebileng ho tsoa ho arsenal ho ntlafatsa boleng. Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2, 'me Kernel.get_and_update_in/3.

Netefatso

Avalator e ka hlalosoa e le:

  • ts'ebetso ea kantle ka khang e le 'ngoe (&MyMod.my_fun/1), e tla amohela feela boleng ba netefatso;
  • ts'ebetso ea kantle e nang le likhang tse peli, &MyMod.my_fun/2, o tla fumana para serie, value bakeng sa netefatso;
  • phethahatso ea module Vela.Validator;
  • tlhophiso parameter threshold, le - ka boikhethelo - compare_by, bona khaolo papiso ka tlase.

Haeba netefatso e atlehile, boleng bo eketsoa lenaneng tlas'a konopo e lumellanang; ho seng joalo, tuple {serie, value} e ea ho :__errors_.

Bapisa

Litekanyetso tse bolokiloeng meleng ena e ka ba eng kapa eng. Ho ruta Vela ho bapisa, ho hlokahala ho fetisetsa compare_by parameter tlhalosong ea letoto (ntle le haeba boleng bo ke ke ba bapisoa le maemo Kernel.</2); parameter ena e lokela ho ba ea mofuta ofe (Vela.value() -> number()). Ka kamehla ho bonolo & &1.

Hape, o ka fetisa parameter ho tlhaloso ea mola comparator ho bala litekanyetso tsa delta (min/max); mohlala, ka ho fetisa Date.diff/2 joalo ka papiso, o ka fumana li-deltas tse nepahetseng bakeng sa matsatsi.

Tsela e 'ngoe e bonolo ea ho sebetsa ke ho fetisa parameter threshold, e hlalosang tekanyo e phahameng e lumelletsoeng ea boleng bo bocha ho {min, max} karohano. Kaha e hlalosoa e le peresente, cheke ha e sebelise comparatorempa e ntse e sebelisoa compare_by. Mohlala, ho hlakisa boleng ba nako ea matsatsi, u tlameha ho hlakisa compare_by: &DateTime.to_unix/1 (ho fumana boleng bo felletseng) le threshold: 1, ho etsa hore litekanyetso tse ncha li lumelloe hafeela li le teng ±band karohano ho tsoa ho boleng ba hajoale.

Qetellong, u ka sebelisa Vela.equal?/2 ho bapisa li-cache tse peli. Haeba litekanyetso li hlalosa mosebetsi equal?/2 kapa compare/2, joale mesebetsi ena e tla sebelisoa ho bapisa, ho seng joalo re sebelisa ka booatla ==/2.

Ho fumana litekanyetso

Ho sebetsana le boemo ba hajoale hangata ho qala ka ho letsa Vela.purge/1, e tlosang litekanyetso tsa khale (haeba validator tlameletsoe ho timestamps). Joale u ka letsetsa Vela.slice/1e tla khutla keyword ka mabitso a mela e le linotlolo le ea pele, boleng ba 'nete.

U ka boela ua sebelisa get_in/2/pop_in/2 bakeng sa phihlello ea maemo a tlase ho boleng moleng o mong le o mong.

Kopo

Vela e ka ba molemo haholo joalo ka "cache ea nako" maemong a ts'ebetso joalo ka GenServer/Agent. Ha re batle ho sebelisa litekanyetso tsa khale, 'me ho etsa sena re boloka ts'ebetso e ntse e sebetsanoa le naha Vela, ka sehatisi se bontšitsoeng ka tlase.

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

и Vela.purge/1 e tlosa litekanyetso tsohle tsa khale ka khutso nako le nako ha re hloka data. Ho fihlella boleng ba 'nete re bitsa feela Vela.slice/1, 'me ha ho hlokahala histori e nyenyane ea thupelo (letoto lohle), re e khutlisa feela - e seng e hlophisitsoe - ka litekanyetso tse tiisitsoeng.

Thabela nako letoto la caching!

Source: www.habr.com

Eketsa ka tlhaloso