ویلا → د وخت لړۍ او نور ډیر څه لپاره سمارټ کیچ

په فنټیک کې، موږ ډیری وختونه د اسعارو د تبادلې نرخ ډیټا خورا لوی مقدار پروسس کوو. موږ د مختلفو سرچینو څخه معلومات ترلاسه کوو، او هر یو یې خپل نظر لري چې څنګه د سبا، بله ورځ، راتلونکې میاشت او حتی راتلونکو دریو کلونو لپاره د تبادلې نرخونه څنګه اضافه کړي. که یوازې یو څوک د نرخونو وړاندوینه کولی شي ښی، دا به وخت وي چې سوداګرۍ وتړئ او یوازې په احمقانه توګه پیسې په شا او خوا بدل کړئ. ځینې ​​​​سرچینې خورا باوري دي، ځینې یې بشپړ کثافات وړاندې کوي، د نږدې سمو ارزښتونو نادر شاملولو سره، مګر د بهرنیو جوړه لپاره. زموږ دنده دا ده چې په هره ثانیه کې د دې لسګونو زرو ارزښتونو له لارې وپلټئ او مشخص کړئ چې پیرودونکو ته دقیقا څه وښیو. موږ اړتیا لرو چې یو سم ارزښت د ټن کثافاتو او خړوبولو څخه فلټر کړو، لکه څنګه چې فلیمینګو د غرمې په ډوډۍ کې کوي.

ویلا → د وخت لړۍ او نور ډیر څه لپاره سمارټ کیچ

د فلیمینګو یو ځانګړی ځانګړتیا د دوی لوی ښکته خوا ته منحل شوي چونګښې دي چې په دې سره دوی د اوبو یا خټو څخه خواړه فلټر کوي.
 - ویکي

په دې توګه کتابتون رامنځته شو Vela، کوم چې په ټاکل شوي وخت وقفو کې د ډیری ارزښتونو لپاره دولتي زیرمه ذخیره کوي. د هود لاندې، دا په الوتنه کې خراب او زاړه ډاټا فلټر کوي، او وروستي ته لاسرسی هم چمتو کوي N د هر کلی لپاره تایید شوي ارزښتونه (د اسعارو جوړه، زموږ په قضیه کې).

راځئ چې ووایو موږ د دریو اسعارو جوړه لپاره نرخونه راټولوو. ساده تعریف Vela د اوسني حالت ذخیره کولو لپاره دا به داسې ښکاري:

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

د ارزښتونو تازه کول

Vela.put/3 فنکشن به په ترتیب سره لاندې کار وکړي:

  • لامل به شي validator په ارزښت کې، که یو تعریف شوی وي (څپرکی وګورئ اعتبار لاندې)؛
  • ارزښت به یا د ښه ارزښتونو قطار ته اضافه کړي که چیرې تایید بریالی وي، یا د خدماتو قطار ته :__errors__ بل ډول
  • د ترتیب کولو لامل کیږي که sorter د ورکړل شوي کیلي لپاره تعریف شوی، یا به په ساده ډول د لیست په سر کې ارزښت واچوي (LIFO، څپرکی وګورئ ترتیبول لاندې)؛
  • قطار به د پیرامیټر مطابق کټ کړي :limit په پیدایښت کې تېر شوی
  • تازه شوی جوړښت بیرته راګرځوي 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]}

همداراز Vela تطبیقوي Access، نو تاسو کولی شئ د ارزښتونو تازه کولو لپاره د ارسنل څخه ژور تازه کولو جوړښتونو لپاره کوم معیاري افعال وکاروئ Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2، او Kernel.get_and_update_in/3.

اعتبار

یو تصدیق کوونکی په لاندې ډول تعریف کیدی شي:

  • بهرنی فعالیت د یو دلیل سره (&MyMod.my_fun/1)، دا به یوازې د اعتبار لپاره ارزښت ترلاسه کړي؛
  • بهرنی فعالیت د دوو دلیلونو سره، &MyMod.my_fun/2، هغه به یوه جوړه ترلاسه کړي serie, value د اعتبار لپاره
  • د ماډل پلي کول Vela.Validator;
  • د ترتیب پیرامیټر threshold، او - په اختیاري توګه - compare_by، څپرکی وګورئ په پرتله لاندې.

که تایید بریالی وي، ارزښت د اړونده کیلي لاندې لیست کې اضافه کیږي؛ که نه نو، ټپل {serie, value} ورتګ :__errors_.

پرتله کول

په دې قطارونو کې زیرمه شوي ارزښتونه هر څه کیدی شي. درس ورکول Vela د دوی پرتله کولو لپاره، دا اړینه ده چې انتقال شي compare_by د لړۍ تعریف کې پیرامیټر (غیر لدې چې ارزښتونه د معیار سره پرتله نشي Kernel.</2); دا پیرامیټر باید د ډول وي (Vela.value() -> number()). په ډیفالټ دا ساده ده & &1.

همچنان ، تاسو کولی شئ د قطار تعریف ته پیرامیټر انتقال کړئ comparator د ډیلټا ارزښتونو محاسبه کول (min/max); د بیلګې په توګه، د لیږد له لارې Date.diff/2 د پرتله کوونکی په توګه، تاسو کولی شئ د نیټو لپاره سم ډیلټا ترلاسه کړئ.

د کار کولو بله اسانه لار د پیرامیټر تیرول دي threshold، کوم چې د نوي ارزښت اعظمي اجازه وړ تناسب تعریفوي {min, max} وقفه څرنګه چې دا د فیصدي په توګه مشخص شوی، چک نه کاروي comparatorمګر بیا هم کاروي compare_by. د مثال په توګه، د نیټې وخت لپاره د حد ارزښت مشخص کولو لپاره، تاسو باید مشخص کړئ compare_by: &DateTime.to_unix/1 (د عددي ارزښت ترلاسه کولو لپاره) او threshold: 1، د دې لامل کیږي چې نوي ارزښتونو ته اجازه ورکړل شي یوازې که دوی دننه وي ±band د اوسني ارزښتونو څخه وقفه.

په نهایت کې ، تاسو کولی شئ وکاروئ Vela.equal?/2 دوه کیچونه پرتله کول. که ارزښتونه یو فنکشن تعریف کړي equal?/2 او یا compare/2، نو دا افعال به د پرتله کولو لپاره وکارول شي ، که نه نو موږ په احمقانه ډول کاروو ==/2.

د ارزښتونو ترلاسه کول

د اوسني حالت پروسس کول معمولا د زنګ وهلو سره پیل کیږي Vela.purge/1، کوم چې متروک ارزښتونه لرې کوي (که validator پورې تړلی timestamps). بیا تاسو کولی شئ تلیفون وکړئ Vela.slice/1کوم چې بیرته راګرځي keyword د قطار نومونو سره د کیلي په توګه او لومړی، اصلي ارزښتونه.

تاسو کولی شئ هم وکاروئ get_in/2/pop_in/2 په هر قطار کې ارزښتونو ته د ټیټې کچې لاسرسي لپاره.

کاریال

Vela د پروسې حالت کې د وخت لړۍ کیچ په توګه خورا ګټور کیدی شي لکه GenServer/Agent. موږ غواړو چې هیڅکله د کورس زاړه ارزښتونه ونه کاروو، او د دې کولو لپاره موږ په ساده ډول د دولت پروسس شوي پروسې سره ساتو Vela، لاندې ښودل شوي تصدیق کونکي سره.

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

и Vela.purge/1 هرکله چې موږ ډیټا ته اړتیا لرو په خاموشۍ سره ټول زاړه ارزښتونه لرې کوي. حقیقي ارزښتونو ته د لاسرسي لپاره موږ په ساده ډول زنګ وهو Vela.slice/1، او کله چې د کورس کوچنۍ تاریخ ته اړتیا وي (ټول لړۍ) ، موږ په ساده ډول دا بیرته ورکوو - دمخه ترتیب شوي - د تایید شوي ارزښتونو سره.

خوشحاله وخت لړۍ کیچ کول!

سرچینه: www.habr.com

Add a comment