Vela → кэши интеллектуалӣ барои силсилаи вақт ва ғайра

Дар fintech, мо аксар вақт бояд ҳаҷми хеле азими маълумоти қурби асъорро коркард кунем. Мо маълумотро аз сарчашмаҳои гуногун мегирем ва ҳар кадоми онҳо дар бораи чӣ гуна экстраполятсияи қурби асъор барои фардо, фардо, моҳи оянда ва ҳатто се соли оянда андешаи худро доранд. Агар касе нархҳоро пешгӯӣ карда метавонист рост, вақти он расидааст, ки тиҷоратро пӯшед ва пулро беақл иваз кунед. Баъзе манбаъҳо боэътимодтаранд, баъзеҳо партовҳои мукаммалро бо ҷузъҳои нодир бо арзишҳои қариб дуруст таъмин мекунанд, аммо барои ҷуфти экзотикӣ. Вазифаи мо аз он иборат аст, ки ин даҳҳо ҳазор арзишҳоро дар як сония гузаронем ва муайян кунем, ки ба мизоҷон чӣ нишон додан лозим аст. Мо бояд як арзиши дурустро аз тонна лой ва лой филтр кунем, ба монанди фламингоҳо дар хӯроки нисфирӯзӣ.

Vela → кэши интеллектуалӣ барои силсилаи вақт ва ғайра

Хусусияти фарқкунандаи фламингоҳо нӯги азими ба поён каҷшудаи онҳост, ки бо он ғизоро аз об ё лой филтр мекунанд.
 - 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 барои калиди додашуда муайян карда шудааст ё танҳо арзишро дар сари рӯйхат мегузорад (ЛИФО, ба боб нигаред Sort дар поён);
  • сатрро мувофики параметр бурида хохад кард :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, ва вақте ки таърихи хурди курс талаб карда мешавад (тамоми силсила), мо онро танҳо баргардонем - аллакай мураттаб - бо арзишҳои тасдиқшуда.

Кэшкунии силсилаи вақт хушбахт!

Манбаъ: will.com

Илова Эзоҳ