Vela → ዘመናዊ መሸጎጫ ለጊዜ ተከታታይ እና ሌሎችም።

በፊንቴክ፣ ብዙ ጊዜ በጣም ግዙፍ የሆነ የምንዛሪ ተመን መረጃን ማካሄድ አለብን። ከተለያዩ ምንጮች መረጃዎችን እናገኛለን፣ እና እያንዳንዳቸው ለነገ፣ ከነገ ወዲያ፣ ከሚቀጥለው ወር እና ሌላው ቀርቶ ለሚቀጥሉት ሶስት አመታት የምንዛሪ ዋጋዎችን እንዴት ማውጣት እንደሚቻል የራሳቸው ሀሳብ አላቸው። አንድ ሰው ተመኖችን መተንበይ ቢችል ብቻ ቀኝ, ንግዱን ለመዝጋት እና ልክ እንደ ሞኝነት ገንዘብን ወደ ኋላ እና ወደ ፊት ለመለወጥ ጊዜው አሁን ነው. አንዳንድ ምንጮች የበለጠ አስተማማኝ ናቸው ፣ አንዳንዶቹ ሙሉ ቆሻሻዎችን ያቀርባሉ ፣ ከሞላ ጎደል ትክክለኛ እሴቶች ጋር ፣ ግን ለየት ያሉ ጥንዶች። የእኛ ስራ እነዚህን በአስር ሺዎች የሚቆጠሩ እሴቶችን በሰከንድ ማጣራት እና ለደንበኞች ምን ማሳየት እንዳለበት መወሰን ነው። ልክ እንደ ፍላሚንጎ በምሳ ሰዓት እንደሚያደርጉት ትክክለኛውን ዋጋ ከብዙ ቶን ቆሻሻ እና ደለል ማጣራት አለብን።

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 ለተወሰነ ቁልፍ ይገለጻል ወይም በቀላሉ እሴቱን በዝርዝሩ ራስ ላይ ያስቀምጣል (LIFO, ምዕራፍ ተመልከት መለየት ከታች);
  • በመለኪያው መሰረት ረድፉን ያስተካክላል :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, ምዕራፍ ተመልከት ማነጻጸር ከታች

ማረጋገጫው ከተሳካ፣ እሴቱ በተዛማጅ ቁልፍ ስር ወደ ዝርዝሩ ይታከላል፣ ካልሆነ ግን tuple {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, እና የትምህርቱ ትንሽ ታሪክ በሚያስፈልግበት ጊዜ (ሙሉው ተከታታይ), በቀላሉ እንመለሳለን - ቀድሞውኑ ተደርድሯል - በተረጋገጡ እሴቶች.

መልካም ጊዜ ተከታታይ መሸጎጫ!

ምንጭ: hab.com

አስተያየት ያክሉ