Vela β vaqt seriyalari va boshqalar uchun aqlli kesh
Fintechda biz ko'pincha juda katta hajmdagi valyuta kursi ma'lumotlarini qayta ishlashimiz kerak. Biz turli manbalardan ma'lumotlarni olamiz va ularning har biri ertaga, ertaga, keyingi oy va hatto keyingi uch yil uchun valyuta kurslarini qanday ekstrapolyatsiya qilish haqida o'z fikriga ega. Agar kimdir stavkalarni bashorat qilsa o'ng, biznesni yopish va faqat ahmoqona pulni oldinga va orqaga almashtirish vaqti keldi. Ba'zi manbalar ishonchliroq, ba'zilari esa deyarli to'g'ri qiymatlarning kamdan-kam qo'shilishi bilan to'liq axlat bilan ta'minlaydi, ammo ekzotik juftliklar uchun. Bizning vazifamiz soniyada o'n minglab qiymatlarni elakdan o'tkazish va mijozlarga aniq nimani ko'rsatishni aniqlashdir. Tushlik paytida flamingolar qilganidek, biz tonnalab axloqsizlik va loydan bitta to'g'ri qiymatni filtrlashimiz kerak.
Flamingolarning o'ziga xos ajralib turadigan xususiyati ularning katta pastga egri tumshug'i bo'lib, ular oziq-ovqatni suv yoki loydan filtrlaydi.
- Wiki
Shunday qilib, kutubxona tug'ildi Vela, u belgilangan vaqt oralig'ida bir nechta qiymatlar uchun davlat keshini saqlaydi. Kaput ostida u yomon va eskirgan ma'lumotlarni tezda filtrlaydi, shuningdek, eng so'nggi ma'lumotlarga kirishni ta'minlaydi N har bir kalit uchun tasdiqlangan qiymatlar (valyuta juftlari, bizning holatlarimizda).
Aytaylik, biz uchta valyuta juftligi uchun stavkalarni yig'amiz. Eng oddiy ta'rif Vela joriy holatni saqlash uchun u shunday ko'rinadi:
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
sabab bo'ladi validator qiymat bo'yicha, agar aniqlangan bo'lsa (bo'limga qarang Tasdiqlash quyida);
Agar tekshirish muvaffaqiyatli bo'lsa, qiymatni yaxshi qiymatlar qatoriga yoki xizmat qatoriga qo'shadi :__errors__ aks holda;
saralashga sabab bo'ladi, agar sorter berilgan kalit uchun belgilangan yoki shunchaki qiymatni ro'yxatning boshiga qo'yadi (LIFO, bobga qarang saralash quyida);
parametrga muvofiq qatorni kesadi :limit yaratilishdan o'tgan;
konfiguratsiya parametri threshold, va - ixtiyoriy - compare_by, bobga qarang qiyoslash quyida ko'rsatilgan.
Agar tekshirish muvaffaqiyatli bo'lsa, qiymat mos keladigan kalit ostidagi ro'yxatga qo'shiladi; aks holda, kortej {serie, value} boradi :__errors_.
Taqqoslash
Ushbu qatorlarda saqlangan qiymatlar har qanday bo'lishi mumkin. O'rgatish Vela ularni solishtirish uchun o'tkazish kerak compare_by seriya ta'rifidagi parametr (agar qiymatlarni standart bilan taqqoslab bo'lmasa). Kernel.</2); bu parametr turi bo'lishi kerak (Vela.value() -> number()). Odatiy bo'lib, bu oddiy & &1.
Bundan tashqari, qator ta'rifiga parametr o'tkazishingiz mumkin comparator delta qiymatlarini hisoblash uchun (min/max); masalan, uzatish orqali Date.diff/2 taqqoslash sifatida siz sanalar uchun to'g'ri deltalarni olishingiz mumkin.
Ishlashning yana bir qulay usuli - parametrni o'tkazish threshold, bu yangi qiymatning maksimal ruxsat etilgan nisbatini belgilaydi {min, max} interval. U foiz sifatida ko'rsatilganligi sababli, chek ishlatilmaydi comparatorlekin hali ham ishlatadi compare_by. Masalan, sana vaqtlari uchun chegara qiymatini belgilash uchun siz belgilashingiz kerak compare_by: &DateTime.to_unix/1 (butun qiymatni olish uchun) va threshold: 1, yangi qiymatlarga faqat ular mavjud bo'lganda ruxsat berilishiga olib keladi Β±band joriy qiymatlardan interval.
Nihoyat, siz foydalanishingiz mumkin Vela.equal?/2 ikkita keshni solishtirish uchun. Agar qiymatlar funktsiyani aniqlasa equal?/2 yoki compare/2, keyin bu funktsiyalar taqqoslash uchun ishlatiladi, aks holda biz ahmoqona foydalanamiz ==/2.
Qadriyatlarni olish
Joriy holatni qayta ishlash odatda qo'ng'iroq qilishdan boshlanadi Vela.purge/1, bu eskirgan qiymatlarni olib tashlaydi (agar validator ga bog'langan timestamps). Keyin qo'ng'iroq qilishingiz mumkin Vela.slice/1qaysi qaytib keladi keyword kalit sifatida qator nomlari va birinchi, haqiqiy qiymatlar bilan.
Siz ham foydalanishingiz mumkin get_in/2/pop_in/2 har bir satrdagi qiymatlarga past darajadagi kirish uchun.
ariza
Vela kabi jarayon holatida vaqt seriyali kesh sifatida juda foydali bo'lishi mumkin GenServer/Agent. Biz hech qachon eskirgan kurs qiymatlaridan foydalanmaslikni istaymiz va buning uchun jarayonni qayta ishlangan holatda ushlab turamiz Vela, quyida ko'rsatilgan validator bilan.
ΠΈ Vela.purge/1 har safar ma'lumotlar kerak bo'lganda barcha eskirgan qiymatlarni jimgina olib tashlaydi. Haqiqiy qiymatlarga kirish uchun biz shunchaki qo'ng'iroq qilamiz Vela.slice/1, va kursning kichik tarixi kerak bo'lganda (butun seriya), biz uni allaqachon saralangan holda tasdiqlangan qiymatlar bilan qaytaramiz.