Vela β storfa smart ar gyfer cyfresi amser a mwy
Yn fintech, yn aml mae'n rhaid i ni brosesu symiau eithaf enfawr o ddata cyfradd cyfnewid arian cyfred. Rydyn ni'n cael data o wahanol ffynonellau, ac mae gan bob un ohonyn nhw ei syniad ei hun o sut i allosod cyfraddau cyfnewid ar gyfer yfory, y diwrnod ar Γ΄l yfory, y mis nesaf a hyd yn oed y tair blynedd nesaf. Os mai dim ond rhywun allai ragweld cyfraddau yn gywir, byddai'n amser cau'r busnes a newid arian yn Γ΄l ac ymlaen yn wirion. Mae rhai ffynonellau yn fwy dibynadwy, mae rhai yn cyflenwi sothach cyflawn, gyda chynhwysion prin o werthoedd cywir bron, ond ar gyfer cyplau egsotig. Ein gwaith ni yw sifftio trwy'r degau o filoedd hyn o werthoedd yr eiliad a phenderfynu beth yn union i'w ddangos i gwsmeriaid. Mae angen inni hidlo'r un gwerth cywir o dunelli o faw a silt, yn union fel y mae fflamingos yn ei wneud amser cinio.
Nodwedd wahaniaethol arbennig o fflamingos yw eu pig anferth ar i lawr, y maent yn hidlo bwyd o ddΕ΅r neu fwd ag ef.
- Wiki
Felly ganwyd y llyfrgell Vela, sy'n storio storfa wladwriaeth ar gyfer gwerthoedd lluosog ar gyfnodau amser penodedig. O dan y cwfl, mae'n hidlo data gwael a hen ffasiwn ar y hedfan, ac mae hefyd yn darparu mynediad i'r diweddaraf N gwerthoedd wedi'u dilysu ar gyfer pob allwedd (parau arian, yn ein hachos ni).
Gadewch i ni ddweud ein bod yn casglu cyfraddau ar gyfer tri phΓ’r arian. Diffiniad symlaf Vela i storio'r cyflwr presennol bydd yn edrych rhywbeth fel hyn:
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
Diweddaru Gwerthoedd
Vela.put/3 Bydd y swyddogaeth yn gwneud y canlynol mewn trefn:
bydd yn achosi validator ar y gwerth, os yw un wedi'i ddiffinio (gweler pennod Dilysu isod);
yn ychwanegu'r gwerth naill ai at y rhes o werthoedd da os oedd y dilysiad yn llwyddiannus, neu i'r rhes gwasanaeth :__errors__ fel arall;
bydd yn achosi didoli os sorter wedi'i ddiffinio ar gyfer allwedd benodol, neu bydd yn rhoi'r gwerth ar ben y rhestr (LIFO, gweler y bennod Trefnu isod);
yn tocio'r rhes yn Γ΄l y paramedr :limit trosglwyddo ar y greadigaeth;
paramedr cyfluniad threshold, ac - yn ddewisol - compare_by, gweler y bennod cymharu isod.
Os yw'r dilysiad yn llwyddiannus, ychwanegir y gwerth at y rhestr o dan yr allwedd gyfatebol; fel arall, y tuple {serie, value} yn mynd i :__errors_.
Cymhariaeth
Gall y gwerthoedd a storir yn y rhesi hyn fod yn unrhyw beth. I ddysgu Vela i'w cymharu, mae angen trosglwyddo compare_by paramedr yn y diffiniad cyfres (oni bai na ellir cymharu'r gwerthoedd Γ’'r safon Kernel.</2); rhaid i'r paramedr hwn fod o fath (Vela.value() -> number()). Yn ddiofyn, mae'n syml & &1.
Hefyd, gallwch chi basio paramedr i ddiffiniad y rhes comparator i gyfrifo gwerthoedd delta (min/max); er enghraifft, trwy drosglwyddo Date.diff/2 fel cymharydd, gallwch gael y deltas cywir ar gyfer dyddiadau.
Ffordd gyfleus arall o weithio yw pasio paramedr threshold, sy'n diffinio'r gymhareb uchaf a ganiateir o'r gwerth newydd i {min, max} cyfwng. Gan ei fod wedi'i nodi fel canran, nid yw'r siec yn defnyddio comparatorond yn dal i ddefnyddio compare_by. Er enghraifft, i bennu gwerth trothwy ar gyfer amseroedd dyddiad, rhaid i chi nodi compare_by: &DateTime.to_unix/1 (i gael gwerth cyfanrif) a threshold: 1, gan achosi gwerthoedd newydd i gael eu caniatΓ‘u dim ond os ydynt i mewn Β±band cyfwng o'r gwerthoedd cyfredol.
Yn olaf, gallwch chi ddefnyddio Vela.equal?/2 i gymharu dau caches. Os yw'r gwerthoedd yn diffinio swyddogaeth equal?/2 neu compare/2, yna bydd y swyddogaethau hyn yn cael eu defnyddio ar gyfer cymharu, fel arall rydym yn dwp yn defnyddio ==/2.
Cael gwerthoedd
Mae prosesu'r cyflwr presennol fel arfer yn dechrau gyda galw Vela.purge/1, sy'n dileu gwerthoedd darfodedig (os validator ynghlwm wrth timestamps). Yna gallwch chi ffonio Vela.slice/1a fydd yn dychwelyd keyword gydag enwau rhes fel allweddi a'r gwerthoedd cyntaf, gwirioneddol.
Gallwch hefyd ddefnyddio get_in/2/pop_in/2 ar gyfer mynediad lefel isel i'r gwerthoedd ym mhob rhes.
Cais
Vela Gall fod yn hynod ddefnyddiol fel storfa cyfres amser mewn cyflwr proses fel GenServer/Agent. Rydym am beidio byth Γ’ defnyddio hen werthoedd cwrs, ac i wneud hyn yn syml rydym yn cadw'r broses gyda'r wladwriaeth wedi'i phrosesu Vela, gyda'r dilysydd a ddangosir isod.
ΠΈ Vela.purge/1 yn cael gwared ar yr holl hen werthoedd yn dawel bob tro y bydd angen y data arnom. I gael mynediad at y gwerthoedd gwirioneddol rydym yn syml yn galw Vela.slice/1, a phan fydd angen hanes bach o'r cwrs (y gyfres gyfan), yn syml, rydyn ni'n ei ddychwelyd - wedi'i ddidoli'n barod - gyda gwerthoedd dilys.