ويلا → سمارٽ ڪيش ٽائيم سيريز ۽ وڌيڪ لاءِ

Fintech ۾، اسان کي اڪثر ڪري ڪرنسي جي مٽاسٽا جي شرح جي ڊيٽا جي وڏي مقدار تي عمل ڪرڻو پوندو. اسان مختلف ذريعن کان ڊيٽا حاصل ڪريون ٿا، ۽ انهن مان هر هڪ جو پنهنجو خيال آهي ته سڀاڻي، سڀاڻي، ايندڙ مهيني ۽ ايندڙ ٽن سالن لاءِ مٽا سٽا جي شرحن کي ڪيئن وڌايو وڃي. جيڪڏهن صرف ڪو ماڻهو قيمت جي اڳڪٿي ڪري سگهي ٿو صحيح، اهو وقت هوندو ڪاروبار بند ڪرڻ ۽ صرف بيوقوفيءَ سان پئسا اڳتي ۽ پوئتي تبديل ڪرڻ. ڪجهه ذريعا وڌيڪ قابل اعتماد آهن، ڪجهه مڪمل گندگي فراهم ڪن ٿا، تقريبن صحيح قدرن جي نادر شموليت سان، پر ڌارين جوڙن لاءِ. اسان جو ڪم آهي انهن ڏهن هزارن قدرن جي ذريعي في سيڪنڊ کي ڇڪڻ ۽ اهو طئي ڪرڻ ته ڇا واقعي گراهڪن کي ڏيکارڻو آهي. اسان کي گهرجي ته هڪ صحيح قدر کي ٽين مٽي ۽ مٽيءَ مان ڪڍي، جيئن فليمنگو لنچ تي ڪندا آهن.

ويلا → سمارٽ ڪيش ٽائيم سيريز ۽ وڌيڪ لاءِ

فليمنگوس جي هڪ خاص خصوصيت سندن وڏي هيٺاهين مڙيل چؤنڪ آهي، جنهن سان هو پاڻي يا مٽيءَ مان کاڌي کي فلٽر ڪندا آهن.
 - Wiki

اهڙيءَ طرح لائبريريءَ جو جنم ٿيو 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 ڏنل ڪيچي لاءِ بيان ڪيو ويو آهي، يا صرف قيمت کي لسٽ جي سر تي رکندو (ليفيو، باب ڏسو ترتيب ڏيڻ هيٺيون)؛
  • پيراميٽر جي مطابق قطار کي ٽرم ڪندو :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

تبصرو شامل ڪريو