Vela → խելացի քեշ ժամանակային շարքերի համար և ավելին
Ֆինտեխում մենք հաճախ ստիպված ենք լինում մշակել արժույթի փոխարժեքի տվյալների բավականին մեծ ծավալներ։ Մենք տվյալներ ենք ստանում տարբեր աղբյուրներից, և նրանցից յուրաքանչյուրն ունի իր սեփական պատկերացումն այն մասին, թե ինչպես կարելի է արտարժույթի արտարժույթը վաղը, մյուս օրը, հաջորդ ամիսը և նույնիսկ հաջորդ երեք տարին: Եթե միայն ինչ-որ մեկը կարողանա գուշակել տոկոսադրույքները ճիշտ, ժամանակն էր փակել բիզնեսը և ուղղակի հիմարաբար փող փոխել: Որոշ աղբյուրներ ավելի հուսալի են, ոմանք մատակարարում են ամբողջական աղբ, գրեթե ճիշտ արժեքների հազվադեպ ընդգրկումներով, բայց էկզոտիկ զույգերի համար: Մեր գործն է մաղել այս տասնյակ հազարավոր արժեքները վայրկյանում և որոշել, թե կոնկրետ ինչ ցույց տալ հաճախորդներին: Մենք պետք է զտենք մեկ ճիշտ արժեքը տոննաներով կեղտից և տիղմից, ճիշտ այնպես, ինչպես դա անում են ֆլամինգոները ճաշի ժամանակ:
Ֆլամինգոների առանձնահատուկ տարբերակիչ հատկանիշը նրանց զանգվածային դեպի ներքեւ կոր կտուցն է, որով նրանք զտում են սնունդը ջրից կամ ցեխից։
- Վիքի
Այսպես ծնվեց գրադարանը 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
կազմաձևման պարամետր 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 յուրաքանչյուր շարքի արժեքներին ցածր մակարդակի հասանելիության համար:
App
Vela կարող է չափազանց օգտակար լինել որպես ժամանակային շարքի քեշ այնպիսի գործընթացի վիճակում, ինչպիսին է GenServer/Agent. Մենք ուզում ենք երբեք չօգտագործել հնացած կուրսային արժեքներ, և դա անելու համար մենք պարզապես պետականորեն ընթացք ենք տալիս Vela, ստորև ներկայացված վավերացնողով:
и Vela.purge/1 հանգիստ հեռացնում է բոլոր հնացած արժեքները ամեն անգամ, երբ մեզ անհրաժեշտ են տվյալներ: Փաստացի արժեքներին մուտք գործելու համար մենք պարզապես զանգահարում ենք Vela.slice/1, և երբ պահանջվում է դասընթացի փոքր պատմություն (ամբողջ շարքը), մենք պարզապես վերադարձնում ենք այն՝ արդեն տեսակավորված, վավերացված արժեքներով։