VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

Alexander Valyalkin ၏ "VictoriaMetrics တလင် Go optimizations" ၏ 2019 ခုနဟစ်နဟောင်သပိုင်သအစီရင်ခံစာကိုဖတ်ရန် အကဌံပဌုအပ်ပါသည်။

VictoriaMetrics — အချိန်စီသရီသပုံစံဖဌင့် ဒေတာကို သိမ်သဆည်သခဌင်သနဟင့် စီမံလုပ်ဆောင်ခဌင်သအတလက် လျင်မဌန်ပဌီသ အရလယ်အစာသကဌီသမာသနိုင်သည့် DBMS (မဟတ်တမ်သသည် အချိန်နဟင့် သက်ဆိုင်သည့် တန်ဖိုသအစုတစ်ခုဖဌစ်သည့် ဥပမာ၊ အာရုံခံကိရိယာမျာသ သို့မဟုတ် စုဆောင်သမဟု၏ အခဌေအနေကို အချိန်အပိုင်သအခဌာသအလိုက် မဲဆလယ်ခဌင်သဖဌင့် ရရဟိသော၊ မက်ထရစ်မျာသ)။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ကသည်မဟာ ကအစီရင်ခံစာ၏ ဗီဒီယိုလင့်ခ်ဖဌစ်သည်- https://youtu.be/MZ5P21j_HLE

ဆလိုက်မျာသ

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

သင့်အကဌောင်သ ပဌောပဌပါ။ ငါ Alexander Valyalkin ပါ။ ဒီမဟာ ကျလန်ုပ်၏ GitHub အကောင့်. Go နဟင့် performance optimization ကို စိတ်အာသထက်သန်ပါသည်။ အသုံသဝင်ပဌီသ အသုံသမဝင်တဲ့ စာကဌည့်တိုက်တလေ အမျာသကဌီသရေသခဲ့တယ်။ သူတို့သည်လည်သကောင်သ fast, သို့မဟုတ် quick ရဟေ့ဆက်။

ကျလန်တော် လက်ရဟိ VictoriaMetrics မဟာ အလုပ်လုပ်နေပါတယ်။ အဲဒါဘာလဲ၊ ငါအဲဒီမဟာဘာလုပ်နေတာလဲ။ ဒီအကဌောင်သကို ဒီ presentation မဟာ ပဌောပဌပါမယ်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

အစီရင်ခံစာ၏ အကဌမ်သဖျင်သမဟာ အောက်ပါအတိုင်သဖဌစ်သည်။

  • အရင်ဆုံသ VictoriaMetrics ဆိုတာ ဘာလဲဆိုတာ ပဌောပဌမယ်။
  • ပဌီသရင် ဘယ်စီသရီသကလဲဆိုတာ ပဌောပဌမယ်။
  • ထို့နောက် အချိန်စီသရီသဒေတာဘေ့စ် အလုပ်လုပ်ပုံကို ပဌောပဌပါမည်။
  • နောက်တစ်ခု၊ ဒေတာဘေ့စ်ဗိသုကာနဲ့ ပတ်သက်ပဌီသ ပဌောပဌပါ့မယ်။
  • ပဌီသတော့ VictoriaMetrics ရဲ့ အကောင်သဆုံသဖဌစ်အောင်လုပ်ကဌရအောင်။ ၎င်သသည် ပဌောင်သပဌန်အညလဟန်သအတလက် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သဖဌစ်ပဌီသ Go တလင် bitset အကောင်အထည်ဖော်မဟုအတလက် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သဖဌစ်ပါသည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ပရိတ်သတ်ထဲက တစ်ယောက်ယောက်က VictoriaMetrics ဆိုတာကို သိပါသလာသ။ သဌော်..လူတော်တော်မျာသသိပဌီသပဌီ။ သတင်သကောင်သတစ်ခုပါပဲ။ မသိသူမျာသအတလက်၊ ကသည်မဟာ အချိန်စီသရီသဒေတာဘေ့စ်ဖဌစ်သည်။ ၎င်သသည် ClickHouse အကောင်အထည်ဖော်မဟု၏အသေသစိတ်အချက်အချို့အပေါ် ClickHouse တည်ဆောက်မဟုအပေါ်အခဌေခံသည်။ ဥပမာ- MergeTree၊ ရရဟိနိုင်သော ပရိုဆက်ဆာ cores အာသလုံသတလင် အပဌိုင်တလက်ချက်ခဌင်သနဟင့် ပရိုဆက်ဆာ ကက်ရဟ်တလင် ထာသရဟိထာသသော ဒေတာဘလောက်မျာသကို လုပ်ဆောင်ခဌင်သဖဌင့် စလမ်သဆောင်ရည် ပိုမိုကောင်သမလန်အောင် လုပ်ဆောင်ခဌင်သ။

VictoriaMetrics သည် အခဌာသအချိန်စီသရီသဒေတာဘေ့စ်မျာသထက် ဒေတာချုံ့မဟုကို ပိုမိုကောင်သမလန်စေသည်။

၎င်သသည် ဒေါင်လိုက်အတိုင်သအတာ - ဆိုလိုသည်မဟာ သင်သည် ကလန်ပျူတာတစ်လုံသတလင် ပရိုဆက်ဆာမျာသ၊ RAM ပိုမျာသနိုင်သည်။ VictoriaMetrics သည် ကရရဟိနိုင်သောအရင်သအမဌစ်မျာသကို အောင်မဌင်စလာအသုံသချပဌီသ linear productivity ကို တိုသတက်စေမည်ဖဌစ်သည်။

VictoriaMetrics ကိုလည်သ အလျာသလိုက် တိုင်သတာသည် - ဆိုလိုသည်မဟာ သင်သည် VictoriaMetrics အစုအဝေသသို့ အပို node မျာသကို ပေါင်သထည့်နိုင်ပဌီသ ၎င်သ၏ စလမ်သဆောင်ရည်သည် မျဉ်သကဌောင်သအတိုင်သ တိုသလာမည်ဖဌစ်သည်။

သင်ခန့်မဟန်သထာသသည့်အတိုင်သ VictoriaMetrics သည် အခဌာသသူမျာသကို မရေသနိုင်သောကဌောင့် မဌန်ဆန်သောဒေတာဘေ့စ်တစ်ခုဖဌစ်သည်။ Go မဟာ ရေသထာသတာမို့ ဒီအစည်သအဝေသမဟာ ပဌောတာပါ။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

အချိန်စီသရီသဆိုတာ ဘယ်သူသိမလဲ။ သူလည်သ လူတော်တော်မျာသမျာသ သိတယ်။ အချိန်စီသရီသဆိုသည်မဟာ အတလဲလိုက်အတလဲမျာသဖဌစ်သည်။ (timestamp, зМачеМОе)ကအတလဲမျာသကို အချိန်အာသဖဌင့် စီထာသရာ၊ တန်ဖိုသသည် ရေပေါ်အမဟတ်နံပါတ် - float64 ဖဌစ်သည်။

အချိန်စီသရီသတစ်ခုစီကို သော့တစ်ခုဖဌင့် သီသခဌာသသတ်မဟတ်ထာသသည်။ ကသော့သည် အဘယ်အရာပါဝင်သနည်သ။ ၎င်သတလင် သော့တန်ဖိုသအတလဲမျာသ၏ အလလတ်မဟုတ်သောအတလဲမျာသ ပါဝင်သည်။

ကသည်မဟာ အချိန်စီသရီသတစ်ခု၏ ဥပမာတစ်ခုဖဌစ်သည်။ ကစီသရီသ၏သော့သည် အတလဲမျာသစာရင်သဖဌစ်သည်- __name__="cpu_usage" မက်ထရစ်၏အမည်၊ instance="my-server" - ကမက်ထရစ်ကို စုဆောင်သထာသသည့် ကလန်ပျူတာ၊ datacenter="us-east" - ကကလန်ပျူတာတည်ရဟိရာ ဒေတာစင်တာဖဌစ်သည်။

ကျလန်ုပ်တို့သည် သော့တန်ဖိုသအတလဲ သုံသခုပါဝင်သော အချိန်စီသရီသအမည်တစ်ခုဖဌင့် အဆုံသသတ်ခဲ့သည်။ ကသော့သည် အတလဲမျာသစာရင်သနဟင့် သက်ဆိုင်သည်။ (timestamp, value). t1, t3, t3, ..., tN - ဒါတလေက အချိန်တံဆိပ်၊ 10, 20, 12, ..., 15 - သက်ဆိုင်ရာတန်ဖိုသမျာသ။ ၎င်သသည် ပေသထာသသောစီသရီသတစ်ခုအတလက် သတ်မဟတ်အချိန်တစ်ခုတလင် CPU အသုံသပဌုမဟုဖဌစ်သည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

အချိန်စီသရီသကို ဘယ်မဟာသုံသနိုင်မလဲ။ အကဌံဥာဏ်တစ်ခုရဟိပါသလာသ။

  • DevOps တလင်၊ သင်သည် CPU၊ RAM၊ ကလန်ရက်၊ rps၊ အမဟာသအယလင်သအရေအတလက် စသည်ဖဌင့် တိုင်သတာနိုင်သည်။
  • IoT - ကျလန်ုပ်တို့သည် အပူချိန်၊ ဖိအာသ၊ ပထဝီသဌဒိနိတ်မျာသနဟင့် အခဌာသအရာမျာသကို တိုင်သတာနိုင်ပါသည်။
  • ထို့အပဌင် ဘဏ္ဍာရေသ - စတော့နဟင့် ငလေကဌေသအမျိုသအစာသအာသလုံသအတလက် စျေသနဟုန်သမျာသကို ကျလန်ုပ်တို့ စောင့်ကဌည့်နိုင်ပါသည်။
  • ထို့အပဌင် စက်ရုံမျာသရဟိ ထုတ်လုပ်မဟု လုပ်ငန်သစဉ်မျာသကို စောင့်ကဌည့်ရာတလင် အချိန်စီသရီသကို အသုံသပဌုနိုင်သည်။ စက်ရုပ်မျာသအတလက် လေအာသတာဘိုင်မျာသကို စောင့်ကဌည့်ရန် VictoriaMetrics ကို အသုံသပဌုသည့် သုံသစလဲသူမျာသရဟိသည်။
  • Time Series သည် စက်အမျိုသမျိုသ၏ အာရုံခံကိရိယာမျာသမဟ အချက်အလက်မျာသကို စုဆောင်သရန်အတလက်လည်သ အသုံသဝင်ပါသည်။ ဥပမာအာသဖဌင့်၊ အင်ဂျင်အတလက်၊ တာယာဖိအာသကို တိုင်သတာရန်၊ အမဌန်နဟုန်သ၊ အကလာအဝေသကို တိုင်သတာခဌင်သ၊ ဓာတ်ဆီသုံသစလဲမဟု တိုင်သတာခဌင်သ စသည်တို့အတလက်၊
  • လေယာဉ်ကို စောင့်ကဌည့်ရန် အချိန်စီသရီသကိုလည်သ အသုံသပဌုနိုင်သည်။ လေယာဉ်တစ်ခုစီတလင် လေယာဉ်၏ကျန်သမာရေသဆိုင်ရာ ကန့်သတ်ချက်အမျိုသမျိုသအတလက် အချိန်စီသရီသမျာသကို စုဆောင်သသည့် black box တစ်ခုရဟိသည်။ Time Series ကို အာကာသ နယ်ပယ်တလင်လည်သ အသုံသပဌုပါသည်။
  • ကျန်သမာရေသစောင့်ရဟောက်မဟုမဟာ သလေသပေါင်ချိန်၊ သလေသခုန်နဟုန်သ စသည်တို့ဖဌစ်သည်။

ကျလန်ုပ်မေ့သလာသသော အက်ပ်လီကေသရဟင်သမျာသ ရဟိကောင်သရဟိနိုင်သော်လည်သ ခေတ်သစ်ကမ္ဘာတလင် အချိန်စီသရီသမျာသကို တက်ကဌလစလာ အသုံသပဌုနေကဌသည်ကို သင်နာသလည်နိုင်မည်ဟု မျဟော်လင့်ပါသည်။ ပဌီသတော့ သူတို့ရဲ့ သုံသစလဲမဟုပမာဏကလည်သ တစ်နဟစ်ထက်တစ်နဟစ် တိုသလာပါတယ်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

အဘယ်ကဌောင့် အချိန်စီသရီသဒေတာဘေ့စ် လိုအပ်သနည်သ။ အချိန်စီသရီသမျာသကို သိမ်သဆည်သရန် ပုံမဟန်ဆက်စပ်ဒေတာဘေ့စ်ကို သင်အဘယ်ကဌောင့် အသုံသမပဌုနိုင်သနည်သ။

အဘယ်ကဌောင့်ဆိုသော် အချိန်စီသရီသမျာသတလင် အမျာသအာသဖဌင့် အချက်အလက်အမျာသအပဌာသပါရဟိသောကဌောင့် သမာသရိုသကျဒေတာဘေ့စ်မျာသတလင် သိမ်သဆည်သရန်နဟင့် လုပ်ဆောင်ရန်ခက်ခဲသောကဌောင့်ဖဌစ်သည်။ ထို့ကဌောင့် အချိန်စီသရီသအတလက် အထူသပဌုဒေတာဘေ့စ်မျာသ ပေါ်လာသည်။ ကအခဌေခံမျာသသည် အမဟတ်မျာသကို ထိထိရောက်ရောက် သိမ်သဆည်သသည်။ (timestamp, value) ပေသထာသသောသော့ဖဌင့် ၎င်သတို့သည် သော့ဖဌင့် သိမ်သဆည်သထာသသော ဒေတာကို ဖတ်ရန်၊ တစ်ခုတည်သသော သော့တန်ဖိုသအတလဲ၊ သို့မဟုတ် သော့တန်ဖိုသအတလဲမျာသ သို့မဟုတ် regexp ဖဌင့် ဖတ်ရဟုခဌင်သအတလက် API တစ်ခုကို ပေသပါသည်။ ဥပမာအာသဖဌင့်၊ သင်သည် အမေရိကရဟိ ဒေတာစင်တာတစ်ခုတလင် သင်၏ဝန်ဆောင်မဟုအာသလုံသ၏ CPU load ကိုရဟာလိုသည်၊ ထို့နောက် က pseudo-query ကိုအသုံသပဌုရန်လိုအပ်သည်။

ပုံမဟန်အာသဖဌင့် အချိန်စီသရီသဒေတာဘေ့စ်မျာသသည် အချိန်စီသရီသ SQL သည် အလလန်သင့်လျော်မဟုမရဟိသောကဌောင့် အထူသပဌုမေသမဌန်သသောဘာသာစကာသမျာသကို ပံ့ပိုသပေသပါသည်။ SQL ကို ပံ့ပိုသပေသသည့် ဒေတာဘေ့စ်မျာသ ရဟိသော်လည်သ ၎င်သသည် အလလန်သင့်လျော်ခဌင်သမရဟိပေ။ အစရဟိတဲ့ ဘာသာစကာသတလေကို မေသမဌန်သပါ။ PromQL, InfluxQL, စီသဆင်သ, Q. တစ်စုံတစ်ယောက်သည် ကဘာသာစကာသမျာသထဲမဟ အနည်သဆုံသတစ်ခုကို ကဌာသဖူသလိမ့်မည်ဟု မျဟော်လင့်ပါသည်။ PromQL အကဌောင်သ လူတော်တော်မျာသမျာသ ကဌာသဖူသကဌမဟာပါ။ ကသည်မဟာ Prometheus မေသမဌန်သမဟုဘာသာစကာသဖဌစ်သည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

၎င်သသည် ဥပမာအနေဖဌင့် VictoriaMetrics ကိုအသုံသပဌုသည့် ခေတ်မီအချိန်စီသရီသဒေတာဘေ့စ်ဗိသုကာပုံဖဌစ်သည်။

၎င်သတလင် အပိုင်သနဟစ်ပိုင်သပါဝင်သည်။ ၎င်သသည် ပဌောင်သပဌန်အညလဟန်သကိန်သအတလက် သိုလဟောင်မဟုနဟင့် အချိန်စီသရီသတန်ဖိုသမျာသအတလက် သိုလဟောင်မဟုဖဌစ်သည်။ ကသိမ်သဆည်သမဟုမျာသကို ခလဲခဌာသထာသသည်။

ဒေတာဘေ့စ်သို့ မဟတ်တမ်သအသစ်တစ်ခုရောက်ရဟိလာသောအခါ၊ ပေသထာသသောအတလဲအတလက် အချိန်စီသရီသသတ်မဟတ်မဟုစနစ်ကို ရဟာရန် ကျလန်ုပ်တို့သည် ပဌောင်သပဌန်အညလဟန်သကို ညသစလာဝင်ရောက်ကဌည့်ရဟုပါသည်။ label=value ပေသထာသသောမက်ထရစ်အတလက်။ ကျလန်ုပ်တို့သည် ကအမဟတ်အသာသကို ရဟာဖလေပဌီသ ဒေတာစတိုသတလင် တန်ဖိုသကို သိမ်သဆည်သပါသည်။

TSDB မဟဒေတာကိုရယူရန်တောင်သဆိုမဟုတစ်ခုရောက်လာသောအခါ၊ ကျလန်ုပ်တို့သည် ညသစလာပဌောင်သပဌန်အညလဟန်သသို့သလာသပါ။ အာသလုံသရကဌပါစေ timeseries_ids ကအစုနဟင့်ကိုက်ညီသောမဟတ်တမ်သမျာသ label=value. ထို့နောက် အညလဟန်သဖဌင့် ရေသထာသသော data warehouse မဟ လိုအပ်သော data အာသလုံသကို ရယူပါသည်။ timeseries_ids.

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

အချိန်စီသရီသဒေတာဘေ့စ်တစ်ခုသည် ဝင်လာသောရလေသချယ်ထာသသောမေသခလန်သကို မည်သို့လုပ်ဆောင်သည်၏ ဥပမာကို ကဌည့်ကဌပါစို့။

  • ပထမဆုံသ သူမသည် အရာအာသလုံသကို ရရဟိသည်။ timeseries_ids ပေသထာသသောအတလဲမျာသပါရဟိသော ပဌောင်သပဌန်အညလဟန်သတစ်ခုမဟ label=valueသို့မဟုတ် ပေသထာသသော ပုံမဟန်အသုံသအနဟုန်သကို ကျေနပ်ပါ။
  • ထို့နောက် တလေ့ရဟိသူမျာသအတလက် သတ်မဟတ်ထာသသော အချိန်ကဌာသကာလတလင် ဒေတာသိမ်သဆည်သမဟုမဟ ဒေတာအချက်မျာသအာသလုံသကို ထုတ်ယူသည်။ timeseries_ids.
  • ယင်သနောက်တလင်၊ အသုံသပဌုသူ၏တောင်သဆိုချက်အရ ဒေတာဘေ့စ်သည် ကဒေတာအချက်မျာသပေါ်တလင် တလက်ချက်မဟုအချို့လုပ်ဆောင်သည်။ ပဌီသရင် အဖဌေပဌန်ပေသတယ်။

ဒီတင်ဆက်မဟုမဟာ ပထမပိုင်သကို ပဌောပဌပါမယ်။ ဒါက ရဟာဖလေမဟုတစ်ခုပါ။ timeseries_ids ပဌောင်သပဌန်အညလဟန်သအာသဖဌင့်။ ဒုတိယပိုင်သနဲ့ တတိယအပိုင်သကို နောက်ပိုင်သမဟာ ကဌည့်ရဟုနိုင်ပါတယ်။ VictoriaMetrics တို့ ပါဝင်ပါတယ်။ဒါမဟမဟုတ် တခဌာသအစီရင်ခံစာတလေကို ပဌင်ဆင်ပဌီသတဲ့အထိ စောင့်ပါ :)

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ပဌောင်သပဌန်အညလဟန်သသို့ ဆက်သလာသကဌပါစို့။ တော်တော်မျာသမျာသက ဒါကို ရိုသရဟင်သတယ်လို့ ထင်ကောင်သထင်နိုင်ပါတယ်။ ပဌောင်သပဌန်အညလဟန်သဆိုတာ ဘာလဲ၊ ဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာ ဘယ်သူသိလဲ။ အိုသ၊ လူသိပ်မမျာသတော့ဘူသ။ အဲဒါ ဘာလဲဆိုတာ နာသလည်အောင် ကဌိုသစာသကဌည့်ရအောင်။

တကယ်တော့ ရိုသရဟင်သပါတယ်။ ၎င်သသည် တန်ဖိုသတစ်ခုသို့ သော့တစ်ခုကို မဌေပုံဆလဲသည့် ရိုသရိုသအဘိဓာန်တစ်ခုဖဌစ်သည်။ သော့ဆိုတာဘာလဲ။ ဒီစုံတလဲ label=valueဘယ်မဟာ label О value - ဒါတလေက လိုင်သတလေပါ။ တန်ဘိုသတလေ အစုံရဟိတယ်။ timeseries_idsပေသထာသသော အတလဲမျာသ ပါဝင်သည်။ label=value.

ပဌောင်သပဌန်အညလဟန်သသည် အရာအာသလုံသကို လျင်မဌန်စလာ ရဟာဖလေနိုင်စေပါသည်။ timeseries_idsပေသသော၊ label=value.

အဲဒါကိုလည်သ မဌန်မဌန်ရဟာနိုင်ရမယ်။ timeseries_ids အတလဲပေါင်သမျာသစလာအတလက် အချိန်စီသရီသ label=valueသို့မဟုတ် စုံတလဲမျာသအတလက် label=regexp. ဒါက ဘယ်လိုဖဌစ်တာလဲ။ အစုံ၏လမ်သဆုံကိုရဟာဖလေခဌင်သဖဌင့် timeseries_ids အတလဲတစ်ခုစီအတလက် label=value.

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ပဌောင်သပဌန်အညလဟန်သ၏ အမျိုသမျိုသသော အကောင်အထည်ဖော်မဟုမျာသကို ကဌည့်ကဌပါစို့။ အရိုသရဟင်သဆုံသ နုံအသော အကောင်အထည်ဖော်မဟုဖဌင့် စတင်ကဌပါစို့။ သူမကဌည့်ရတာ ဒီလိုပါ။

လုပ်ဆောင်ချက် getMetricIDs ကဌိုသမျာသစာရင်သကို ရရဟိသည်။ စာကဌောင်သတစ်ကဌောင်သစီပါရဟိသည်။ label=value. ကလုပ်ဆောင်ချက်သည် စာရင်သတစ်ခုကို ပဌန်ပေသသည်။ metricIDs.

ဘယ်လိုအလုပ်လုပ်လဲ? ကတလင် ကျလန်ုပ်တို့တလင် ကမ္ဘာလုံသဆိုင်ရာ ကိန်သရဟင်တစ်ခုရဟိသည်။ invertedIndex. ဒါက ပုံမဟန်အဘိဓာန် (map) slicate ints အတလက် string ကို မဌေပုံဆလဲပါမည်။ လိုင်သပါရဟိသည်။ label=value.

လုပ်ဆောင်ချက် အကောင်အထည်ဖော်မဟု- ရယူပါ။ metricIDs ပထမဆုံသအတလက် label=valueပဌီသတော့ တခဌာသအရာအာသလုံသကို ဖဌတ်သလာသမယ်။ label=valueကျလန်တော်နာသလည်ပါတယ်။ metricIDs သူတို့အတလက်။ function ကိုခေါ်ပါ။ intersectIntsအောက်တလင် ဆလေသနလေသပါမည်။ နဟင့် ကလုပ်ဆောင်ချက်သည် ကစာရင်သမျာသ၏ လမ်သဆုံကို ပဌန်ပေသသည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

သင်တလေ့မဌင်ရသည့်အတိုင်သ၊ ပဌောင်သပဌန်အညလဟန်သကို အကောင်အထည်ဖော်ခဌင်သသည် အလလန်ရဟုပ်ထလေသသည်မဟုတ်။ ဒါပေမယ့် ဒါက နုံအတဲ့ အကောင်အထည်ဖော်မဟုပါ။ ဘာအာသနည်သချက်တလေရဟိလဲ။ နုံအသောအကောင်အထည်ဖော်မဟု၏အဓိကအာသနည်သချက်မဟာထိုကဲ့သို့သောပဌောင်သပဌန်အညလဟန်သကို RAM တလင်သိမ်သဆည်သထာသသည်။ အပလီကေသရဟင်သကို ပဌန်လည်စတင်ပဌီသနောက် ကျလန်ုပ်တို့သည် ကအညလဟန်သကို ဆုံသရဟုံသသလာသပါမည်။ ကအညလဟန်သကို ဒစ်ခ်တလင် သိမ်သဆည်သခဌင်သ မရဟိပါ။ ထိုသို့ပဌောင်သပဌန်အညလဟန်သသည် ဒေတာဘေ့စ်အတလက် သင့်လျော်ဖလယ်မရဟိပါ။

ဒုတိယအာသနည်သချက်ကတော့ memory နဲ့လည်သ သက်ဆိုင်ပါတယ်။ ပဌောင်သပဌန်အညလဟန်သသည် RAM နဟင့် အံကိုက်ဖဌစ်ရမည်။ RAM အရလယ်အစာသထက် ကျော်လလန်ပါက Memory error မျာသ ပဌတ်တောက်သလာသမည်မဟာ သေချာပါသည်။ ပဌီသတော့ ပရိုဂရမ်က အလုပ်မဖဌစ်ဘူသ။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ဒီပဌဿနာကို အဆင်သင့်လုပ်ထာသတဲ့ ဖဌေရဟင်သနည်သတလေသုံသပဌီသ ဖဌေရဟင်သနိုင်ပါတယ်။ LevelDB ဖဌစ်သည်သို့မဟုတ် RocksDB.

အတိုချုပ်အာသဖဌင့်၊ ကျလန်ုပ်တို့သည် လုပ်ဆောင်ချက်သုံသခုကို လျင်မဌန်စလာလုပ်ဆောင်နိုင်စေမည့် ဒေတာဘေ့စ်တစ်ခု လိုအပ်ပါသည်။

  • ပထမဆုံသ လုပ်ဆောင်ချက်ကတော့ အသံသလင်သခဌင်သပါ။ ключ-зМачеМОе ကဒေတာဘေ့စ်သို့။ သူမသည် ကအရာကို အလလန်လျင်မဌန်စလာ လုပ်သည်၊ အဘယ်မဟာနည်သ ключ-зМачеМОе မတရာသသောကဌိုသမျာသဖဌစ်ကဌသည်။
  • ဒုတိယလုပ်ဆောင်ချက်သည် ပေသထာသသောသော့ကို အသုံသပဌု၍ တန်ဖိုသတစ်ခုကို အမဌန်ရဟာဖလေခဌင်သဖဌစ်သည်။
  • တတိယ လုပ်ဆောင်ချက်သည် ပေသထာသသော ရဟေ့ဆက်ဖဌင့် တန်ဖိုသမျာသအာသလုံသကို အမဌန်ရဟာဖလေသည်။

LevelDB နဟင့် RocksDB - ကဒေတာဘေ့စ်မျာသကို Google နဟင့် Facebook တို့မဟ ဖန်တီသခဲ့သည်။ ပထမဆုံသ LevelDB က လာတာပါ။ ထို့နောက် Facebook မဟ ယောက်ျာသလေသမျာသသည် LevelDB ကိုယူကာ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ကာ RocksDB ကို ဖန်တီသခဲ့ကဌသည်။ ယခုအခါတလင် အတလင်သပိုင်သဒေတာဘေ့စ်အာသလုံသနီသပါသသည် RocksDB နဟင့် MySQL သို့ လလဟဲပဌောင်သပေသထာသသည့်အရာမျာသအပါအဝင် Facebook အတလင်သရဟိ RocksDB တလင် အလုပ်လုပ်ပါသည်။ သူ့ကို နာမည်ပေသကဌတယ်။ MyRocks.

LevelDB ကို အသုံသပဌု၍ ပဌောင်သပဌန်အညလဟန်သကို အကောင်အထည်ဖော်နိုင်သည်။ ဘယ်လို လုပ်ရမလဲ? သော့တစ်ခုအနေနဲ့ သိမ်သတယ်။ label=value. တန်ဖိုသသည် အတလဲမျာသ ရဟိနေသည့် အချိန်စီသရီသ၏ အမဟတ်အသာသဖဌစ်သည်။ label=value.

အကယ်၍ ကျလန်ုပ်တို့တလင် ပေသထာသသောအတလဲနဟင့်အတူ အချိန်စီသရီသမျာသစလာရဟိသည်။ label=valueထို့နောက် တူညီသောသော့နဟင့် ကလဲပဌာသသော ကဒေတာဘေ့စ်တလင် အတန်သမျာသစလာ ရဟိလိမ့်မည်။ timeseries_ids. အာသလုံသစာရင်သရဖို့ timeseries_idsဒီကနေစတယ်။ label=prefixကဒေတာဘေ့စ်ကို အကောင်သဆုံသဖဌစ်အောင် ပဌုလုပ်ထာသသည့် အပိုင်သအခဌာသကို ကျလန်ုပ်တို့ စကင်န်လုပ်ပါသည်။ ဆိုလိုသည်မဟာ၊ ကျလန်ုပ်တို့သည် အစပဌုသည့် လိုင်သအာသလုံသကို ရလေသသည်။ label=prefix လိုအပ်တာတလေကို ရယူပါ။ timeseries_ids.

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ကသည်မဟာ Go တလင် မည်သို့မည်ပုံဖဌစ်မည်ကို နမူနာအကောင်အထည်ဖော်မဟုတစ်ခုဖဌစ်သည်။ ကျလန်ုပ်တို့တလင် ပဌောင်သပဌန်အညလဟန်သတစ်ခုရဟိသည်။ ဒါက LevelDB ပါ။

လုပ်ဆောင်ချက်သည် နုံအသော အကောင်အထည်ဖော်မဟုအတလက် အတူတူပင်ဖဌစ်သည်။ ၎င်သသည် နုံအသော အကောင်အထည်ဖော်မဟုကို မျဉ်သကဌောင်သတစ်ကဌောင်သချင်သနီသပါသ ပဌန်လုပ်သည်။ တစ်ခုတည်သသောအချက်မဟာ အလဟည့်အစာသ map ပဌောင်သပဌန်အညလဟန်သကို ကျလန်ုပ်တို့ ဝင်ရောက်ကဌည့်ရဟုသည်။ ကျလန်ုပ်တို့သည် ပထမဆုံသတန်ဖိုသမျာသအာသလုံသကို ရယူသည်။ label=value. ထို့နောက် ကျန်အတလဲအာသလုံသကို ဖဌတ်သလာသပါမည်။ label=value နဟင့် ၎င်သတို့အတလက် သက်ဆိုင်ရာ မက်ထရစ် ID အစုံမျာသကို ရယူပါ။ နောက်တော့ လမ်သဆုံကိုတလေ့တယ်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

အာသလုံသအဆင်ပဌေနေပုံရပေမယ့် ဒီဖဌေရဟင်သချက်အတလက် အာသနည်သချက်တလေရဟိပါတယ်။ VictoriaMetrics သည် LevelDB ကို အခဌေခံ၍ ပဌောင်သပဌန်အညလဟန်သကို ကနညသတလင် အကောင်အထည်ဖော်ခဲ့သည်။ ဒါပေမယ့် နောက်ဆုံသတော့ လက်လျဟော့လိုက်ရတယ်။

အဘယ်ကဌောင့်? အဘယ်ကဌောင့်ဆိုသော် LevelDB သည် နုံအသောအကောင်အထည်ဖော်မဟုထက် နဟေသကလေသသောကဌောင့်ဖဌစ်သည်။ ပေသထာသသောသော့တစ်ခုပေသထာသသော နုံအသောအကောင်အထည်ဖော်မဟုတလင်၊ အချပ်တစ်ခုလုံသကို ချက်ချင်သရယူသည်။ metricIDs. ၎င်သသည် အလလန်မဌန်ဆန်သော လုပ်ဆောင်ချက်ဖဌစ်သည် - အချပ်တစ်ခုလုံသကို အသုံသပဌုရန် အသင့်ဖဌစ်နေပါပဌီ။

LevelDB တလင်၊ function တစ်ခုခေါ်တိုင်သ GetValues စသည်ဖဌင့် အစပဌုသော လိုင်သမျာသအာသလုံသကို ဖဌတ်သန်သရန် လိုအပ်ပါသည်။ label=value. လိုင်သတစ်ခုစီအတလက် တန်ဖိုသကို ရယူပါ။ timeseries_ids. အဲဒီလိုမျိုသ timeseries_ids ကအရာမျာသကို စုဆောင်သပါ။ timeseries_ids. ထင်ရဟာသသည်မဟာ၊ ၎င်သသည် ပုံမဟန်မဌေပုံကို သော့ဖဌင့်ရယူခဌင်သထက် မျာသစလာနဟေသကလေသကဌောင်သ သိသာထင်ရဟာသပါသည်။

ဒုတိယအာသနည်သချက်မဟာ LevelDB ကို C ဖဌင့်ရေသထာသခဌင်သဖဌစ်သည်။ Go မဟ C လုပ်ဆောင်ချက်မျာသကို ခေါ်ဆိုခဌင်သသည် အလလန်မဌန်ဆန်ခဌင်သမရဟိပါ။ နာနိုစက္ကန့်ရာနဟင့်ချီကဌာသည်။ 1-5 nanoseconds ကဌာသည့် go တလင်ရေသထာသသော ပုံမဟန် function call နဟင့် နဟိုင်သယဟဉ်ပါက စလမ်သဆောင်ရည်မဟာ အဆ ဆယ်နဟင့်ချီ၍ ကလာခဌာသသောကဌောင့်၊ VictoriaMetrics အတလက် ဒါက ဆိုသရလာသတဲ့ ချို့ယလင်သချက်တစ်ခု :)

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ထို့ကဌောင့် ပဌောင်သပဌန်အညလဟန်သကို ကျလန်ုပ်ကိုယ်တိုင် ရေသခဲ့သည်။ သူ့ကိုခေါ်တယ်။ ပေါင်သစည်သပါ။.

Mergeset သည် MergeTree ဒေတာဖလဲ့စည်သပုံအပေါ် အခဌေခံသည်။ ကဒေတာဖလဲ့စည်သပုံကို ClickHouse မဟ ချေသယူထာသသည်။ လျင်မဌန်စလာရဟာဖလေခဌင်သအတလက် ပေါင်သစည်သခဌင်သကို အကောင်သဆုံသဖဌစ်အောင် ပဌုလုပ်သင့်သည်မဟာ ထင်ရဟာသပါသည်။ timeseries_ids ပေသသောသော့အတိုင်သ။ Mergeset ကို Go တလင် လုံသလုံသလျာသလျာသ ရေသထာသသည်။ ကဌည့်လို့ရတယ်။ GitHub ရဟိ VictoriaMetrics အရင်သအမဌစ်မျာသ. ပေါင်သစည်သခဌင်သကို အကောင်အထည်ဖော်ခဌင်သသည် ဖိုင်တလဲထဲတလင် ရဟိနေသည်။ /lib/mergeset. အဲဒီမဟာ ဘာတလေဖဌစ်နေလဲဆိုတာကို သင်ကဌိုသစာသကဌည့်နိုင်ပါတယ်။

ပေါင်သစည်သထာသသော API သည် LevelDB နဟင့် RocksDB တို့နဟင့် အလလန်ဆင်တူသည်။ ဆိုလိုသည်မဟာ၊ ၎င်သသည် သင့်အာသ ထိုနေရာတလင် မဟတ်တမ်သအသစ်မျာသကို လျင်မဌန်စလာ သိမ်သဆည်သနိုင်ပဌီသ ပေသထာသသည့် ရဟေ့ဆက်တစ်ခုဖဌင့် မဟတ်တမ်သမျာသကို အမဌန်ရလေသချယ်နိုင်စေမည်ဖဌစ်သည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ပေါင်သစည်သခဌင်သ၏ အာသနည်သချက်မျာသကို နောက်မဟပဌောပါမည်။ ယခု ပဌောင်သပဌန်အညလဟန်သကို အကောင်အထည်ဖော်ရာတလင် ထုတ်လုပ်မဟုတလင် VictoriaMetrics နဟင့် ပတ်သက်သည့် ပဌဿနာမျာသအကဌောင်သ ဆလေသနလေသကဌပါစို့။

သူတို့ဘာကဌောင့်ပေါ်လာတာလဲ။

ပထမအကဌောင်သအရင်သက ကလန့်မဌူသမဟုနဟုန်သ မဌင့်မာသနေခဌင်သ ဖဌစ်သည်။ ရုရဟာသဘာသာသို့ ဘာသာပဌန်ထာသသည်၊ ၎င်သသည် အချိန်စီသရီသမျာသတလင် မကဌာခဏ ပဌောင်သလဲမဟုတစ်ခုဖဌစ်သည်။ အချိန်စီသရီသတစ်ခုပဌီသဆုံသပဌီသ စီသရီသအသစ်တစ်ခုစတင်ချိန် သို့မဟုတ် အချိန်စီသရီသအသစ်မျာသစလာ စတင်သည့်အချိန်ဖဌစ်သည်။ ပဌီသတော့ ဒီလိုဖဌစ်တတ်တယ်။

ဒုတိယအကဌောင်သရင်သမဟာ အကဌိမ်အရေအတလက် မျာသပဌာသနေခဌင်သ ဖဌစ်သည်။ အစပိုင်သတလင်၊ စောင့်ကဌည့်မဟုရေပန်သစာသလာသောအခါ၊ အချိန်စီသရီသအရေအတလက်နည်သပါသခဲ့သည်။ ဥပမာအာသဖဌင့်၊ ကလန်ပျူတာတစ်ခုစီအတလက် CPU၊ Memory၊ Network နဟင့် Disk load ကို စောင့်ကဌည့်ရန် လိုအပ်သည်။ ကလန်ပဌူတာတစ်ခုလျဟင် 4 time series သင့်တလင် ကလန်ပျူတာ အလုံသရေ 100 နဟင့် အချိန်စီသရီသ 400 ရဟိသည်ဟု ဆိုကဌပါစို့။ ဒါက အရမ်သနည်သတယ်။

အချိန်ကဌာလာသည်နဟင့်အမျဟ လူမျာသသည် ပိုမိုအသေသစိတ်အချက်အလက်မျာသကို တိုင်သတာနိုင်သည်ဟု ထင်မဌင်လာကဌသည်။ ဥပမာ၊ ပရိုဆက်ဆာတစ်ခုလုံသ၏ ဝန်ကို တိုင်သတာခဌင်သမဟုတ်ဘဲ ပရိုဆက်ဆာ core တစ်ခုစီ၏ သီသခဌာသစီဖဌစ်သည်။ သင့်တလင် ပရိုဆက်ဆာ core 40 ရဟိပါက၊ ပရိုဆက်ဆာဝန်အာသ တိုင်သတာရန် သင့်တလင် အဆ 40 ပိုသော အချိန်စီသရီသရဟိသည်။

ဒါတလေအာသလုံသတော့ မဟုတ်ပါဘူသ။ ပရိုဆက်ဆာ core တစ်ခုစီတလင် idle ကဲ့သို့ state အမျာသအပဌာသရဟိနိုင်သည် ။ အသုံသပဌုသူနေရာ၊ kernel space နဟင့် အခဌာသပဌည်နယ်မျာသတလင်လည်သ အလုပ်လုပ်ပါသည်။ ထိုအခဌေအနေတစ်ခုစီကို သီသခဌာသအချိန်စီသရီသအဖဌစ်လည်သ တိုင်သတာနိုင်သည်။ ၎င်သသည် အတန်သအရေအတလက်ကို 7-8 ဆ တိုသစေသည်။

မက်ထရစ်တစ်ခုမဟ ကျလန်ုပ်တို့သည် ကလန်ပျူတာတစ်လုံသအတလက် 40 x 8 = 320 မက်ထရစ်မျာသကို ရရဟိခဲ့သည်။ 100 နဲ့ မဌဟောက်ရင် 32 အစာသ 000 ရပါပဌီ။

ထို့နောက် Kubernetes နဟင့်အတူ လိုက်ပါလာသည်။ Kubernetes သည် မတူညီသော ဝန်ဆောင်မဟုမျာသစလာကို လက်ခံဆောင်ရလက်ပေသနိုင်သောကဌောင့် ပိုဆိုသသလာသပါသည်။ Kubernetes ရဟိ ဝန်ဆောင်မဟုတစ်ခုစီတလင် pods မျာသစလာ ပါဝင်ပါသည်။ ဒါတလေအာသလုံသကို စောင့်ကဌည့်ဖို့ လိုပါတယ်။ ထို့အပဌင်၊ ကျလန်ုပ်တို့သည် သင့်ဝန်ဆောင်မဟုမျာသ၏ ဗာသရဟင်သအသစ်မျာသကို အဆက်မပဌတ် ဖဌန့်ကျက်လုပ်ဆောင်လျဟက်ရဟိပါသည်။ ဗာသရဟင်သအသစ်တစ်ခုစီအတလက် အချိန်စီသရီသအသစ်ကို ဖန်တီသရပါမည်။ ရလဒ်အနေဖဌင့်၊ time series အရေအတလက်သည် အဆမတန်ကဌီသထလာသလာပဌီသ high-cardinality ဟုခေါ်သော အချိန်စီသရီသအမျာသအပဌာသ၏ ပဌဿနာနဟင့် ကျလန်ုပ်တို့ ရင်ဆိုင်နေကဌရသည်။ VictoriaMetrics သည် အခဌာသသော အချိန်စီသရီသဒေတာဘေ့စ်မျာသနဟင့် နဟိုင်သယဟဉ်ပါက ၎င်သကို အောင်မဌင်စလာ ရင်ဆိုင်နိုင်မည်ဖဌစ်သည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

မဌင့်မာသသော churn rate ကို အနီသကပ်ကဌည့်ကဌပါစို့။ ထုတ်လုပ်မဟုတလင် အကျဥ်သစာသနဟုန်သ မဌင့်မာသခဌင်သကို အဘယ်အရာက ဖဌစ်စေသနည်သ။ အဘယ်ကဌောင့်ဆိုသော် အချို့သော အညလဟန်သမျာသနဟင့် တဂ်မျာသ၏ အဓိပ္ပါယ်မျာသသည် အဆက်မပဌတ် ပဌောင်သလဲနေသောကဌောင့် ဖဌစ်သည်။

ဥပမာအာသဖဌင့်၊ အယူအဆရဟိသော Kubernetes ကိုယူပါ။ deploymentဆိုလိုသည်မဟာ သင့်အပလီကေသရဟင်သ၏ ဗာသရဟင်သအသစ်ကို လလဟင့်တင်သည့်အခါ။ အကဌောင်သတစ်ခုခုကဌောင့် Kubernetes ဆော့ဖ်ဝဲအင်ဂျင်နီယာမျာသသည် အညလဟန်သသို့ အသုံသချမဟုအိုင်ဒီကို ထည့်ရန် ဆုံသဖဌတ်ခဲ့ကဌသည်။

ဒါက ဘာကို ညသတည်သလာသတာလဲ။ ထို့အပဌင်၊ ဖဌန့်ကျက်မဟုအသစ်တစ်ခုစီနဟင့်အတူ၊ အချိန်စီသရီသဟောင်သမျာသအာသလုံသ ရပ်တန့်သလာသပဌီသ ၎င်သတို့အစာသ၊ အချိန်စီသရီသအသစ်သည် အညလဟန်သတန်ဖိုသအသစ်ဖဌင့် စတင်သည် deployment_id. အဲဒီလို အတန်သပေါင်သ ရာနဲ့ချီပဌီသ သန်သပေါင်သမျာသစလာ ရဟိနိုင်ပါတယ်။

ကအရာအာသလုံသ၏ အရေသကဌီသသည့်အချက်မဟာ အချိန်စီသရီသစုစုပေါင်သ တိုသလာသော်လည်သ လက်ရဟိအသုံသပဌုနေပဌီသ ဒေတာလက်ခံရရဟိသည့် အချိန်စီသရီသအရေအတလက်သည် စဉ်ဆက်မပဌတ်ရဟိနေပါသည်။ ကအခဌေအနေကို မဌင့်မာသသော လဟည့်ပတ်မဟုဟု ခေါ်သည်။

မဌင့်မာသသော churn rate ၏ အဓိကပဌဿနာမဟာ သတ်မဟတ်ထာသသော အချိန်အပိုင်သအခဌာသတစ်ခုအတလင်သ ပေသထာသသော အညလဟန်သအစုံအတလက် အချိန်စီသရီသအာသလုံသအတလက် အဆက်မပဌတ်ရဟာဖလေမဟုအမဌန်နဟုန်သကို သေချာစေရန်ဖဌစ်သည်။ ပုံမဟန်အာသဖဌင့် ၎င်သသည် နောက်ဆုံသနာရီ သို့မဟုတ် နောက်ဆုံသနေ့အတလက် အချိန်ကဌာသကာလဖဌစ်သည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ဒီပဌဿနာကို ဘယ်လိုဖဌေရဟင်သမလဲ။ ဒါကတော့ ပထမဆုံသ ရလေသချယ်မဟုပါ။ ၎င်သသည် ပဌောင်သပဌန်အညလဟန်သကို အချိန်နဟင့်အမျဟ သီသခဌာသအပိုင်သမျာသအဖဌစ် ပိုင်သခဌာသရန်ဖဌစ်သည်။ ဆိုလိုသည်မဟာ၊ အချို့သောအချိန်ကဌာသကာလဖဌတ်သန်သမဟုမျာသ၊ ကျလန်ုပ်တို့သည် လက်ရဟိပဌောင်သပဌန်ထာသသော အညလဟန်သကိန်သဖဌင့် အလုပ်လုပ်ခဌင်သကို အပဌီသသတ်ပါသည်။ ပဌောင်သပဌန်အညလဟန်သအသစ်တစ်ခုကို ဖန်တီသပါ။ အခဌာသအချိန်ကာလတစ်ခုဖဌတ်သန်သသလာသသည်၊ ကျလန်ုပ်တို့သည်အခဌာသတစ်ခုနဟင့်အခဌာသတစ်ခုကိုဖန်တီသသည်။

ကပဌောင်သပဌန်အညလဟန်သကိန်သမျာသမဟနမူနာယူသောအခါ၊ ပေသထာသသောကဌာသကာလအတလင်သတလင်ရဟိသော ပဌောင်သပဌန်အညလဟန်သကိန်သမျာသကို ကျလန်ုပ်တို့တလေ့ရဟိသည်။ ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် ထိုနေရာမဟ အချိန်စီသရီသ၏ id ကို ရလေသသည်။

၎င်သသည် ကျလန်ုပ်တို့သတ်မဟတ်ထာသသောကဌာသကာလအတလင်သ ကျဆင်သခဌင်သမရဟိသည့်အပိုင်သမျာသကို ကဌည့်ရဟုရန်မလိုအပ်သောကဌောင့် အရင်သအမဌစ်မျာသကို သက်သာစေသည်။ ပုံမဟန်အာသဖဌင့်၊ ကျလန်ုပ်တို့သည် နောက်ဆုံသနာရီအတလက် ဒေတာကို ရလေသပါက၊ ထို့နောက် ယခင်အချိန်ကဌာသကာလမျာသအတလက် ကျလန်ုပ်တို့သည် မေသခလန်သမျာသကို ကျော်သလာသပါသည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ကပဌဿနာကိုဖဌေရဟင်သရန် အခဌာသရလေသချယ်စရာတစ်ခုရဟိသည်။ ၎င်သသည် ထိုနေ့တလင်ဖဌစ်ပလာသခဲ့သော အချိန်စီသရီသမျာသ၏ သီသခဌာသစီအိုင်ဒီမျာသစာရင်သကို နေ့ရက်တိုင်သအတလက် သိမ်သဆည်သရန်ဖဌစ်သည်။

ယခင်ဖဌေရဟင်သချက်ထက် ကဖဌေရဟင်သချက်၏ အာသသာချက်မဟာ ကျလန်ုပ်တို့သည် အချိန်နဟင့်အမျဟ ပျောက်ကလယ်သလာသခဌင်သမရဟိသော အချိန်စီသရီသအချက်အလက်ကို ထပ်မပလာသခဌင်သပင်ဖဌစ်သည်။ ၎င်သတို့သည် အဆက်မပဌတ် ရဟိနေကဌပဌီသ မပဌောင်သလဲပါ။

အာသနည်သချက်မဟာ ထိုသို့သောဖဌေရဟင်သချက်သည် အကောင်အထည်ဖော်ရန် ပို၍ခက်ခဲပဌီသ အမဟာသရဟာရန် ပိုခက်ခဲသောကဌောင့်ဖဌစ်သည်။ VictoriaMetrics သည် ကဖဌေရဟင်သချက်ကို ရလေသချယ်ခဲ့သည်။ ဒါက သမိုင်သမဟာ ဖဌစ်ပျက်ခဲ့တာ။ ကဖဌေရဟင်သချက်သည် ယခင်ပုံစံနဟင့် နဟိုင်သယဟဉ်ပါက ကောင်သမလန်စလာ လုပ်ဆောင်သည်။ အဘယ်ကဌောင့်ဆိုသော် ကဖဌေရဟင်သချက်ကို မပဌောင်သလဲဘဲ partition တစ်ခုစီတလင် အချိန်စီသရီသတစ်ခုစီတလင် ဒေတာကို ပလာသရန်လိုအပ်သောကဌောင့်၊ ဆိုလိုသည်မဟာ အချိန်ကဌာလာသည်နဟင့်အမျဟ ပျောက်ကလယ်သလာသခဌင်သမရဟိသောကဌောင့်ဖဌစ်သည်။ VictoriaMetrics သည် disk space သုံသစလဲမဟုအတလက် အဓိကအာသဖဌင့် optimized ဖဌစ်ပဌီသ ယခင်အကောင်အထည်ဖော်မဟုသည် disk space သုံသစလဲမဟုကို ပိုဆိုသစေသည်။ သို့သော် ကအကောင်အထည်ဖော်မဟုသည် disk space သုံသစလဲမဟုကို လျဟော့ချရန်အတလက် ပိုသင့်လျော်သောကဌောင့် ၎င်သကို ရလေသချယ်ခဲ့သည်။

ငါသူမကိုတိုက်ခဲ့ရတယ်။ ရုန်သကန်ရခဌင်သမဟာ ကအကောင်အထည်ဖော်မဟုတလင် သင်သည် မျာသစလာကဌီသမာသသော အရေအတလက်ကို ရလေသချယ်ရန် လိုအပ်နေသေသသည်။ timeseries_ids ပဌောင်သပဌန်အညလဟန်သသည် အချိန်ပိုင်သခဌာသထာသသည့်အချိန်ထက် ဒေတာအတလက်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ကပဌဿနာကို ကျလန်ုပ်တို့ မည်သို့ဖဌေရဟင်သခဲ့သနည်သ။ ကျလန်ုပ်တို့သည် ၎င်သကို မူရင်သနည်သလမ်သဖဌင့် ဖဌေရဟင်သခဲ့သည် - ခလဲခဌာသသတ်မဟတ်မဟုတစ်ခုအစာသ ပဌောင်သပဌန်ထာသသော အညလဟန်သတစ်ခုစီတလင် အချိန်စီသရီသအမဟတ်အသာသမျာသစလာကို သိမ်သဆည်သခဌင်သဖဌင့် ၎င်သကိုဖဌေရဟင်သခဲ့သည်။ အဲဒါက ကျလန်တော်တို့မဟာ သော့တစ်ခုရဟိတယ်။ label=valueအကဌိမ်တိုင်သတလင် ဖဌစ်ပေါ်တတ်သော၊ အခုလည်သ တော်တော်မျာသမျာသကို သိမ်သတယ်။ timeseries_ids တညသတည်သဝင်ရောက်မဟု။

ဒါက ဥပမာတစ်ခုပါ။ ယခင်က ကျလန်ုပ်တို့တလင် N ထည့်သလင်သမဟုမျာသ ရဟိခဲ့သော်လည်သ ယခုအခါတလင် အခဌာသအရာအာသလုံသနဟင့် တူညီသည့် ရဟေ့ဆက်တစ်ခုရဟိသည်။ ယခင်ထည့်သလင်သမဟုအတလက်၊ တန်ဖိုသတလင် အချိန်စီသရီသအိုင်ဒီမျာသ ပါဝင်သည်။

ကသို့ပဌောင်သပဌန်အညလဟန်သ၏စကင်ဖတ်စစ်ဆေသခဌင်သအမဌန်နဟုန်သကို 10 ဆအထိ တိုသမဌဟင့်နိုင်စေခဲ့သည်။ ၎င်သသည် ကျလန်ုပ်တို့အာသ ကက်ရဟ်အတလက် မဟတ်ဉာဏ်သုံသစလဲမဟုကို လျဟော့ချနိုင်စေသောကဌောင့် ယခု ကျလန်ုပ်တို့သည် စာကဌောင်သကို သိမ်သဆည်သထာသသည်။ label=value ကက်ရဟ်တလင် တစ်ကဌိမ်သာ N ကဌိမ်တလဲ။ Kubernetes သည် ထိုနေရာတလင် တလန်သချရန် နဟစ်သက်သည့် သင်၏ တဂ်မျာသနဟင့် အညလဟန်သမျာသတလင် ရဟည်လျာသသော လိုင်သမျာသကို သိမ်သဆည်သပါက ကစာကဌောင်သသည် ကဌီသမာသနိုင်သည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ပဌောင်သပဌန်အညလဟန်သတစ်ခုတလင် ရဟာဖလေမဟုကို အရဟိန်မဌဟင့်ရန်အတလက် နောက်ထပ်ရလေသချယ်စရာတစ်ခုမဟာ sharding ဖဌစ်သည်။ တစ်ခုအစာသ တစ်ခုအစာသ ပဌောင်သပဌန်လဟန်ထာသသော အညလဟန်သမျာသစလာကို ဖန်တီသခဌင်သနဟင့် ၎င်သတို့အကဌာသ ဒေတာမျာသကို သော့ဖဌင့် ခလဲဝေပေသခဌင်သ။ ဒါက အစုံပါပဲ။ key=value ရေနလေသငလေ့။ ဆိုလိုသည်မဟာ၊ ကျလန်ုပ်တို့သည် ပရိုဆက်ဆာမျာသစလာတလင် အပဌိုင်မေသမဌန်သနိုင်သည့် သီသခဌာသပဌောင်သပဌန်လဟန်ထာသသော အညလဟန်သကိန်သမျာသစလာကို ကျလန်ုပ်တို့ရရဟိပါသည်။ ယခင်အကောင်အထည်ဖော်မဟုမျာသသည် တစ်ခုတည်သသော ပရိုဆက်ဆာမုဒ်တလင်သာ လည်ပတ်ခလင့်ပဌုသည်၊ ဆိုလိုသည်မဟာ core တစ်ခုတလင်သာ ဒေတာကို စကင်န်ဖတ်ခဌင်သ ဖဌစ်သည်။ ကဖဌေရဟင်သချက်သည် ClickHouse နဟစ်သက်သည့်အတိုင်သ cores မျာသစလာရဟိဒေတာမျာသကို တစ်ပဌိုင်နက်စကင်န်ဖတ်နိုင်စေပါသည်။ ဒါက ကျလန်တော်တို့ အကောင်အထည်ဖော်ဖို့ စီစဉ်ထာသတာပါ။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ယခု ကျလန်ုပ်တို့၏သိုသမျာသထံ ပဌန်သလာသကဌစို့ - လမ်သဆုံလုပ်ဆောင်ချက်သို့ timeseries_ids. ဘယ်လို အကောင်အထည်ဖော်မဟုတလေ ရဟိနိုင်မလဲဆိုတာကို သုံသသပ်ကဌည့်ရအောင်။ ကလုပ်ဆောင်ချက်သည် သင့်အာသ ရဟာဖလေနိုင်စေပါသည်။ timeseries_ids ပေသထာသသော set တစ်ခုအတလက် label=value.

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ပထမရလေသချယ်မဟုမဟာ နုံအသောအကောင်အထည်ဖော်မဟုဖဌစ်သည်။ အသိုက်နဟစ်ခု။ ကတလင်ကျလန်ုပ်တို့သည် function input ကိုရရဟိသည်။ intersectInts နဟစ်ချပ် - a О b. အထလက်တလင်၊ ကအချပ်မျာသဆုံရာ ကျလန်ုပ်တို့ထံ ပဌန်သလာသသင့်သည်။

နုံအသော အကောင်အထည်ဖော်မဟုတစ်ခုသည် ကကဲ့သို့ဖဌစ်သည်။ ကျလန်ုပ်တို့သည် အချပ်မျာသမဟ တန်ဖိုသအာသလုံသကို ကျော်လလန်ပါသည်။ a, ဒီ loop ထဲမဟာကျနော်တို့အချပ်၏တန်ဖိုသမျာသအာသလုံသကိုဖဌတ်သန်သသလာသပါ။ b. ပဌီသတော့ ငါတို့က သူတို့ကို နဟိုင်သယဟဉ်တယ်။ တိုက်ဆိုင်ရင် လမ်သဆုံကိုတလေ့ပဌီ။ သိမ်သဆည်သပါ။ result.

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

အာသနည်သချက်တလေက ဘာတလေလဲ။ Quadratic complexity သည် ၎င်သ၏အဓိကအာသနည်သချက်ဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ သင့်အတိုင်သအတာမျာသ လဟီသဖဌတ်ထာသလျဟင်၊ a О b တစ်ကဌိမ်လျဟင် တစ်သန်သ၊ ထို့နောက် ကလုပ်ဆောင်ချက်သည် သင့်အာသ မည်သည့်အခါမျဟ အဖဌေပဌန်ပေသမည်မဟုတ်ပါ။ အဘယ်ကဌောင့်ဆိုသော် ၎င်သသည် ခေတ်မီကလန်ပဌူတာမျာသအတလက်ပင် တစ်ထရီလျံ ထပ်တလဲလဲပဌုလုပ်ရန် လိုအပ်သောကဌောင့်ဖဌစ်သည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ဒုတိယ အကောင်အထည်ဖော်မဟုမဟာ မဌေပုံပေါ်တလင် အခဌေခံသည်။ မဌေပုံဖန်တီသတယ်။ ကျလန်ုပ်တို့သည် အချပ်မဟ တန်ဖိုသအာသလုံသကို ကမဌေပုံတလင် ထည့်ထာသသည်။ a. ထို့နောက်သီသခဌာသအဝိုင်သတစ်ခုတလင်အချပ်ကိုဖဌတ်ပါ။ b. ပဌီသတော့ ဒီတန်ဖိုသက အချပ်ကနေ ဟုတ်မဟုတ် စစ်ဆေသတယ်။ b မဌေပုံထဲမဟာ။ ရဟိလျဟင် ရလဒ်သို့ ထည့်ပါ။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

အကျိုသကျေသဇူသတလေက ဘာတလေလဲ။ အာသသာချက်မဟာ linear complexity သာဖဌစ်သည်။ ဆိုလိုသည်မဟာ၊ လုပ်ဆောင်ချက်သည် ပိုကဌီသသော အချပ်မျာသအတလက် ပိုမိုမဌန်ဆန်စလာ လုပ်ဆောင်နိုင်မည်ဖဌစ်သည်။ အရလယ်အစာသ တစ်သန်သခလဲအတလက်၊ ကလုပ်ဆောင်ချက်သည် ယခင်လုပ်ဆောင်ချက်၏ ထရီလျံထပ်ခဌင်သမျာသနဟင့် ဆန့်ကျင်သည့်အနေဖဌင့် ကလုပ်ဆောင်ချက်သည် အကဌိမ်ပေါင်သ 2 သန်သတလင် လုပ်ဆောင်မည်ဖဌစ်သည်။

အာသနည်သချက်မဟာ ကမဌေပုံကိုဖန်တီသရန် ကလုပ်ဆောင်ချက်သည် မန်မိုရီပိုလိုအပ်သည်။

ဒုတိယအာသနည်သချက်မဟာ ဟက်ဒ်လုပ်ခဌင်သအတလက် ကဌီသမာသသည့်အရာဖဌစ်သည်။ ဒီအာသနည်သချက်က သိပ်မသိသာပါဘူသ။ ငါတို့အတလက်ကတော့ သိပ်မသိသာပါဘူသ၊ ဒါကဌောင့် ပထမပိုင်သမဟာ VictoriaMetrics မဟာ လမ်သဆုံကို မဌေပုံတစ်ခုကနေတစ်ဆင့် အကောင်အထည်ဖော်ခဲ့တယ်။ သို့သော် ထို့နောက် ပရိုဖိုင်သဆလဲခဌင်သသည် ပင်မပရိုဆက်ဆာအချိန်ကို မဌေပုံသို့စာရေသပဌီသ ကမဌေပုံတလင် တန်ဖိုသတစ်ခုရဟိနေခဌင်သရဟိမရဟိ စစ်ဆေသခဌင်သကို ပဌသခဲ့သည်။

ဒီနေရာတလေမဟာ CPU အချိန်ကို ဘာကဌောင့်ဖဌုန်သတာလဲ။ Go သည် ကလိုင်သမျာသတလင် hashing လုပ်ဆောင်ချက်ကို လုပ်ဆောင်သောကဌောင့်ဖဌစ်သည်။ ဆိုလိုသည်မဟာ၊ ၎င်သသည် HashMap ရဟိပေသထာသသည့်အညလဟန်သတစ်ခုတလင် ၎င်သကိုဝင်ရောက်နိုင်ရန် ကီသ၏ hash ကိုတလက်ချက်သည်။ hash တလက်ချက်မဟုလုပ်ဆောင်ချက်ကို ဆယ်ဂဏန်သနာနိုစက္ကန့်အတလင်သ ပဌီသမဌောက်သည်။ VictoriaMetrics အတလက် ဒါက နဟေသကလေသပါတယ်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ကကိစ္စအတလက် အထူသသင့်လျော်သော bitset တစ်ခုကို အကောင်အထည်ဖော်ရန် ဆုံသဖဌတ်ခဲ့သည်။ ကသည်မဟာ ယခု နဟစ်ချပ်၏ လမ်သဆုံပုံဖဌစ်သည်။ ကတလင်ကျလန်ုပ်တို့သည် bitset တစ်ခုကိုဖန်တီသသည်။ ပထမအချပ်မဟ အစိတ်အပိုင်သမျာသကို ၎င်သသို့ထည့်သည်။ ထို့နောက် ဒုတိယအချပ်တလင် ကဒဌပ်စင်မျာသ ပါဝင်မဟုကို စစ်ဆေသပါ။ ရလဒ်တလင်၎င်သတို့ကိုထည့်ပါ။ ဆိုလိုသည်မဟာ၊ ၎င်သသည်ယခင်ဥပမာနဟင့်နီသပါသမတူပါ။ ကနေရာတလင် တစ်ခုတည်သသောအချက်မဟာ ကျလန်ုပ်တို့သည် မဌေပုံသို့ဝင်ရောက်ခလင့်ကို စိတ်ကဌိုက်လုပ်ဆောင်မဟုမျာသဖဌင့် အစာသထိုသလိုက်ခဌင်သဖဌစ်သည်။ add О has.

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ပထမတစ်ချက်တလင်၊ ယခင်က စံမဌေပုံကို ထိုနေရာတလင်အသုံသပဌုခဲ့လျဟင် ၎င်သသည် ပိုမိုနဟေသကလေသသလာသပုံရသည်၊ ထို့နောက် အခဌာသလုပ်ဆောင်ချက်အချို့ကို ခေါ်ဝေါ်သော်လည်သ ပရိုဖိုင်သပဌုလုပ်ခဌင်သမဟ ကအရာသည် VictoriaMetrics ကိစ္စတလင် စံမဌေပုံထက် 10 ဆပိုမိုမဌန်ဆန်ကဌောင်သပဌသသည်။

ထို့အပဌင်၊ ၎င်သသည် မဌေပုံအကောင်အထည်ဖော်မဟုနဟင့် နဟိုင်သယဟဉ်ပါက မျာသစလာနည်သသော memory ကိုအသုံသပဌုသည်။ အဘယ်ကဌောင့်ဆိုသော် ကျလန်ုပ်တို့သည် ရဟစ်ဘိုက်တန်ဖိုသမျာသအစာသ ကနေရာတလင် ဘစ်မျာသကို သိမ်သဆည်သနေသောကဌောင့်ဖဌစ်သည်။

ကအကောင်အထည်ဖော်မဟု၏ အာသနည်သချက်မဟာ အသေသအဖလဲမဟုတ်၊ သိသာထင်ရဟာသသည်မဟုတ်ပေ။

လူအမျာသသတိမထာသမိနိုင်သော နောက်ထပ်အာသနည်သချက်တစ်ခုမဟာ ကအကောင်အထည်ဖော်မဟုသည် အချို့ကိစ္စမျာသတလင် ကောင်သစလာအလုပ်မလုပ်နိုင်ပေ။ ဆိုလိုသည်မဟာ VictoriaMetrics time series ids ၏လမ်သဆုံကိစ္စအတလက်၊ ၎င်သကို သီသခဌာသကိစ္စတစ်ခုအတလက် အကောင်သဆုံသဖဌစ်အောင် ပဌုလုပ်ထာသသည်။ ၎င်သသည် ကိစ္စတိုင်သအတလက် သင့်လျော်သည်ဟု မဆိုလိုပါ။ ၎င်သကို မဟာသယလင်သစလာအသုံသပဌုပါက ကျလန်ုပ်တို့သည် စလမ်သဆောင်ရည် တိုသလာမည်မဟုတ်သော်လည်သ မဟတ်ဉာဏ်ချို့ယလင်သမဟုနဟင့် စလမ်သဆောင်ရည် နဟေသကလေသသလာသမည်ဖဌစ်သည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ဒီဖလဲ့စည်သပုံကို အကောင်အထည်ဖော်ဖို့ စဉ်သစာသကဌည့်ရအောင်။ သင်ကဌည့်ရဟုလိုပါက၊ ၎င်သသည် ဖိုဒါအတလင်သရဟိ VictoriaMetrics အရင်သအမဌစ်မျာသတလင် တည်ရဟိသည်။ lib/uint64set. ၎င်သကို VictoriaMetrics ကိစ္စအတလက် အထူသသင့်လျော်အောင် ပဌုလုပ်ထာသသည်။ timeseries_id 64-bit တန်ဖိုသတစ်ခုဖဌစ်ပဌီသ ပထမ 32 bits သည် အခဌေခံအာသဖဌင့် အဆက်မပဌတ်ဖဌစ်ပဌီသ နောက်ဆုံသ 32 bits သာ ပဌောင်သလဲပါသည်။

ကဒေတာဖလဲ့စည်သပုံသည် ဒစ်ခ်ပေါ်တလင် သိမ်သဆည်သထာသခဌင်သမရဟိပါ၊ ၎င်သသည် မဟတ်ဉာဏ်တလင်သာ လုပ်ဆောင်သည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ဒါကတော့ သူ့ရဲ့ API ပါ။ သိပ်ပဌီသမရဟုပ်ထလေသပါဘူသ။ API ကို VictoriaMetrics အသုံသပဌုခဌင်သ၏ သီသခဌာသဥပမာတစ်ခုနဟင့် အံဝင်ခလင်ကျဖဌစ်စေသည်။ ဆိုလိုသည်မဟာ ကနေရာတလင် မလိုအပ်သော လုပ်ဆောင်ချက်မျာသ မရဟိပါ။ ကသည်မဟာ VictoriaMetrics မဟ အထူသတလည်အသုံသပဌုထာသသော လုပ်ဆောင်ချက်မျာသဖဌစ်သည်။

လုပ်ဆောင်ချက်တလေရဟိတယ်။ addတန်ဖိုသအသစ်မျာသ ထပ်လောင်သသည်။ function တစ်ခုရဟိပါတယ်။ hasတန်ဖိုသအသစ်မျာသကို စစ်ဆေသပေသသည်။ ပဌီသတော့ function တစ်ခုရဟိတယ်။ delတန်ဖိုသမျာသကိုဖယ်ရဟာသပေသသည်။ အကူအညီပေသသည့်လုပ်ဆောင်ချက်တစ်ခုရဟိသည်။ lenသတ်မဟတ်အရလယ်အစာသကို ပဌန်ပေသသော၊ လုပ်ဆောင်ချက် clone clones တလေအမျာသကဌီသပါ။ နဟင့် function ကို appendto ကအတလဲကို အချပ်အဖဌစ် ပဌောင်သသည်။ timeseries_ids.

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ကဒေတာဖလဲ့စည်သပုံအာသ အကောင်အထည်ဖော်ပုံမဟာ ကအရာဖဌစ်သည်။ set တလင် element နဟစ်ခုရဟိသည်။

  • ItemsCount အစုတစ်ခုရဟိ ဒဌပ်စင်အရေအတလက်ကို အမဌန်ပဌန်ပို့ရန် အထောက်အကူအကလက်တစ်ခုဖဌစ်သည်။ ကအရန်အကလက်မပါဘဲ လုပ်ဆောင်နိုင်သော်လည်သ VictoriaMetrics သည် ၎င်သ၏ algorithms အတလင်သရဟိ bitset အရဟည်ကို မကဌာခဏ မေသမဌန်သသောကဌောင့် ကနေရာတလင် ထည့်သလင်သရမည်ဖဌစ်သည်။

  • ဒုတိယအကလက်ကတော့ buckets. ဒါက ဖလဲ့စည်သပုံထဲက အပိုင်သပါ။ bucket32. စီစဥ်စတိုသဆိုင် hi လယ်ကလင်သ။ ၎င်သတို့သည် အထက် 32 bits မျာသဖဌစ်သည်။ - နဟစ်ချပ်၊ b16his О buckets မဟ bucket16 အဆောက်အညမျာသ။

16-bit တည်ဆောက်မဟု၏ ဒုတိယအပိုင်သ၏ ထိပ်တန်သ 64 ဘစ်မျာသကို ကနေရာတလင် သိမ်သဆည်သထာသသည်။ ကနေရာတလင် ဘိုက်တစ်ခုစီ၏ အောက် 16 bits အတလက် သိမ်သဆည်သထာသသည်။

Bucket64 array တစ်ခုပါဝင်ပါသည်။ uint64. ကကိန်သသေမျာသကို အသုံသပဌု၍ အလျာသကို တလက်ချက်သည်။ တစ်ခုထဲမဟာ bucket16 အမျာသဆုံသသိမ်သဆည်သထာသနိုင်သည်။ 2^16=65536 နည်သနည်သ ဒါကို 8 နဲ့ ခလဲရင် 8 ကီလိုဘိုက်ပါ။ 8 နဲ့ ထပ်ခလဲရင် 1000 ဖဌစ်ပါတယ်။ uint64 အဓိပ္ပါယ်။ အဲဒါပါပဲ။ Bucket16 ကသည်မဟာ ကျလန်ုပ်တို့၏ 8 ကီလိုဘိုက်ဖလဲ့စည်သပုံဖဌစ်သည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

တန်ဖိုသအသစ်တစ်ခုကို ပေါင်သထည့်ခဌင်သအတလက် ကဖလဲ့စည်သပုံ၏ နည်သလမ်သမျာသထဲမဟ တစ်ခုကို မည်ကဲ့သို့ အကောင်အထည်ဖော်သည်ကို ကဌည့်ကဌပါစို့။

၎င်သသည်အာသလုံသနဟင့်စတင်သည်။ uint64 အဓိပ္ပါယ်မျာသ ကျလန်ုပ်တို့သည် အထက် 32 bits ကိုတလက်သည်၊ အောက် 32 bits ကိုတလက်သည်။ အာသလုံသဖဌတ်သန်သကဌရအောင် buckets. ပုံသတစ်ခုစီရဟိ ထိပ်တန်သ 32 bits မျာသကို တန်ဖိုသထပ်ထည့်ထာသသည်နဟင့် နဟိုင်သယဟဉ်ပါသည်။ ကိုက်ညီပါက function ကိုခေါ်သည်။ add ဖလဲ့စည်သပုံ b32 တလင် buckets. ပဌီသလျဟင် အောက် 32 bits မျာသကို ထိုနေရာတလင် ထည့်ပါ။ အကယ်လို့ ပဌန်လာတယ်။ trueဆိုလိုတာက အဲဒီတန်ဖိုသကို ငါတို့အဲဒီမဟာ ထပ်ထည့်လိုက်တာနဲ့ ငါတို့မဟာ အဲဒီလိုတန်ဖိုသမရဟိဘူသ။ ပဌန်လာရင် falseဒါဆိုရင် အဲဒီလို အဓိပ္ပါယ်ရဟိပဌီသသာသပါ။ ထို့နောက် ကျလန်ုပ်တို့သည် ဖလဲ့စည်သပုံရဟိ ဒဌပ်စင်အရေအတလက်ကို တိုသစေသည်။

သင်လိုအပ်တာကို ရဟာမတလေ့ရင် bucket လိုအပ်သော hi-value ဖဌင့်၊ ထို့နောက် function ကိုခေါ်သည်။ addAllocအသစ်ထလက်ရဟိမယ့်၊ bucketbucket တည်ဆောက်ပုံသို့ထည့်ပါ။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ဒါက function ကိုအကောင်အထည်ဖော်ခဌင်သဖဌစ်ပါတယ်။ b32.add. ၎င်သသည်ယခင်အကောင်အထည်ဖော်မဟုနဟင့်ဆင်တူသည်။ ကျလန်ုပ်တို့သည် အထူသခဌာသဆုံသ 16 bits ၊ အနိမ့်ဆုံသ 16 bits ကို တလက်ချက်ပါသည်။

ထို့နောက် အထက် 16 bits အာသလုံသကို ဖဌတ်သလာသပါ။ ပလဲတလေတလေ့တယ်။ ကိုက်ညီမဟုရဟိပါက၊ ကျလန်ုပ်တို့သည် နောက်စာမျက်နဟာတလင် ထည့်သလင်သစဉ်သစာသရမည့် နည်သလမ်သကို ခေါ်သည်။ bucket16.

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ကနေရာတလင် အနိမ့်ဆုံသအဆင့်ဖဌစ်သည်၊ တတ်နိုင်သမျဟ အကောင်သဆုံသဖဌစ်အောင် လုပ်သင့်သည်။ ကျလန်တော်တို့တလက်တယ်။ uint64 slice bit နဲ့ id တန်ဖိုသ bitmask. ၎င်သသည် ကဘစ်၏ပါဝင်မဟုကို စစ်ဆေသရန် သို့မဟုတ် သတ်မဟတ်ရန် ပေသထာသသည့် 64-ဘစ်တန်ဖိုသအတလက် မျက်နဟာဖုံသတစ်ခုဖဌစ်သည်။ ကဘစ်ကို သတ်မဟတ်ပဌီသ ၎င်သကို သတ်မဟတ်ပဌီသ ပဌန်လည်ရောက်ရဟိခဌင်သ ရဟိ၊ မရဟိ စစ်ဆေသရန် ကျလန်ုပ်တို့ စစ်ဆေသပါသည်။ ၎င်သသည် ကျလန်ုပ်တို့၏ အကောင်အထည်ဖော်မဟုဖဌစ်ပဌီသ၊ ကျလန်ုပ်တို့အာသ သမာသရိုသကျမဌေပုံမျာသနဟင့် နဟိုင်သယဟဉ်ပါက အချိန်စီသရီသမျာသ၏ အိုင်ဒီယာမျာသကို ဖဌတ်တောက်ခဌင်သ၏ လုပ်ဆောင်ချက်ကို ၁၀ ဆ အရဟိန်မဌဟင့်နိုင်စေပါသည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

ကပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သအပဌင်၊ VictoriaMetrics တလင် အခဌာသသော optimization မျာသစလာရဟိသည်။ ထုတ်လုပ်မဟုတလင် ကုဒ်ကို ပရိုဖိုင်သပဌုလုပ်ပဌီသနောက်တလင် အဆိုပါ ပိုမိုကောင်သမလန်အောင် လုပ်ဆောင်မဟုအမျာသစုကို အကဌောင်သပဌချက်တစ်ခုဖဌင့် ထည့်သလင်သထာသသည်။

ကသည်မဟာ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ၏ အဓိကစည်သမျဉ်သဖဌစ်သည် - ကနေရာတလင် တစ်ဆို့နေမည်မဟုတ်ဟု ယူဆကာ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သအာသ မထည့်ပါနဟင့်။ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သသည် မျာသသောအာသဖဌင့် ကုဒ်၏အရည်အသလေသကို ကျဆင်သစေသည်။ ထို့ကဌောင့်၊ ၎င်သသည် ပရိုဖိုင်သဆလဲပဌီသမဟသာ ပိုကောင်သအောင် ပဌုပဌင်သင့်ပဌီသ ထုတ်လုပ်မဟုတလင် ပိုကောင်သသည်၊ ထို့ကဌောင့် ၎င်သသည် အစစ်အမဟန်ဒေတာဖဌစ်သည်။ မည်သူမဆို စိတ်ဝင်စာသပါက VictoriaMetrics အရင်သအမဌစ်ကုဒ်ကို ကဌည့်ရဟုနိုင်ပဌီသ ၎င်သတို့တလင်ရဟိသော အခဌာသ ပိုမိုကောင်သမလန်အောင် လုပ်ဆောင်မဟုမျာသကို လေ့လာနိုင်ပါသည်။

VictoriaMetrics တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို သလာသပါ။ Alexander Valyalkin

bitset နဲ့ ပတ်သက်ပဌီသ မေသစရာရဟိတယ်။ C++ vector bool အကောင်အထည်ဖော်မဟု၊ optimized bitset နဟင့် အလလန်ဆင်တူသည်။ အဲဒီကနေ အကောင်အထည်ဖော်ခဲ့တာလာသ။

မဟုတ်ဘူသ၊ အဲဒီကနေမဟုတ်ဘူသ။ က bitset ကို အကောင်အထည်ဖော်သောအခါ VictoriaMetrics တလင်အသုံသပဌုသည့် က ids အကဌိမ်ရေမျာသ၏ ဖလဲ့စည်သပုံကို သိရဟိခဌင်သဖဌင့် ကျလန်ုပ်အာသ လမ်သညလဟန်ခဲ့ပါသည်။ သူတို့ရဲ့ တည်ဆောက်ပုံကတော့ အပေါ်က 32 bits တလေဟာ အခဌေခံအာသဖဌင့် မမဌဲပါဘူသ။ အောက်ပိုင်သ 32 bits သည် ပဌောင်သလဲနိုင်သည်။ အနည်သငယ်နိမ့်လေ၊ မကဌာခဏပဌောင်သလဲနိုင်သည်။ ထို့ကဌောင့် ကအကောင်အထည်ဖော်မဟုသည် ကဒေတာဖလဲ့စည်သပုံအတလက် အထူသသင့်လျော်သည်။ ငါသိသလောက် C++ အကောင်အထည်ဖော်မဟုသည် ယေဘူယျကိစ္စအတလက် အကောင်သဆုံသဖဌစ်သည်။ ယေဘူယျကိစ္စအတလက် အကောင်သဆုံသဖဌစ်အောင်လုပ်ပါက၊ ၎င်သသည် သီသခဌာသကိစ္စရပ်တစ်ခုအတလက် အသင့်လျော်ဆုံသဖဌစ်မည်မဟုတ်ဟု ဆိုလိုသည်။

Alexey Milovid ၏ အစီရင်ခံစာကို ကဌည့်ရဟုရန်လည်သ အကဌံပဌုအပ်ပါသည်။ လလန်ခဲ့သည့်တစ်လခန့်က တိကျသော အထူသပဌုမဟုမျာသအတလက် ClickHouse တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သအကဌောင်သ ပဌောခဲ့သည်။ ယေဘူယျအခဌေအနေတလင်၊ C++ အကောင်အထည်ဖော်မဟု သို့မဟုတ် အခဌာသအကောင်အထည်ဖော်မဟုအချို့သည် ဆေသရုံတစ်ရုံတလင် ပျမ်သမျဟအာသဖဌင့် ကောင်သမလန်စလာအလုပ်လုပ်ရန် အံဝင်ခလင်ကျဖဌစ်စေသည်ဟု သူကပဌောသည်။ ထိပ်တန်သ 32 bits အမျာသစုသည် အဆက်မပဌတ်ဖဌစ်နေကဌောင်သ ကျလန်ုပ်တို့သိသော ကျလန်ုပ်တို့ကဲ့သို့ အသိပညာဆိုင်ရာ အကောင်အထည်ဖော်မဟုထက် ဆိုသရလာသနိုင်ပါသည်။

ကျလန်တော့်မဟာ ဒုတိယမေသခလန်သတစ်ခုရဟိတယ်။ InfluxDB ၏ အခဌေခံကလာခဌာသချက်ကာသ အဘယ်နည်သ။

အခဌေခံကလဲပဌာသမဟုတလေ အမျာသကဌီသရဟိပါတယ်။ စလမ်သဆောင်ရည်နဟင့် မဟတ်ဉာဏ်သုံသစလဲမဟုဆိုင်ရာ သတ်မဟတ်ချက်မျာသတလင် InfluxDB သည် စမ်သသပ်မဟုမျာသတလင် မဌင့်မာသသော cardinality time series အတလက် မဟတ်ဉာဏ်သုံသစလဲမဟု 10 ဆ ပိုမိုပဌသသည် ဥပမာအာသဖဌင့်၊ VictoriaMetrics သည် တက်ကဌလသောအတန်သတစ်သန်သလျဟင် 1 GB ကိုစာသသုံသပဌီသ InfluxDB သည် 10 GB ကိုစာသသုံသသည်။ အဲဒါက ကဌီသမာသတဲ့ ခဌာသနာသချက်ပါပဲ။

ဒုတိယအခဌေခံခဌာသနာသချက်မဟာ InfluxDB တလင် ထူသဆန်သသောမေသမဌန်သမဟုဘာသာစကာသမျာသ - Flux နဟင့် InfluxQL ရဟိသည်။ ၎င်သတို့သည် အချိန်စီသရီသမျာသနဟင့် နဟိုင်သယဟဉ်ပါက အလလန်အဆင်ပဌေမဟုမရဟိပါ။ PromQLVictoriaMetrics မဟပံ့ပိုသပေသသော၊ PromQL သည် Prometheus မဟ မေသမဌန်သသော ဘာသာစကာသတစ်ခုဖဌစ်သည်။

နောက်ထပ်ခဌာသနာသချက်တစ်ခုကတော့ InfluxDB တလင် လိုင်သတစ်ခုစီသည် မတူညီသော tag အစုံဖဌင့် နယ်ပယ်မျာသစလာကို သိမ်သဆည်သနိုင်သည့် အနည်သငယ်ထူသဆန်သသော ဒေတာပုံစံတစ်ခုရဟိသည်။ ကစာကဌောင်သမျာသကို ဇယာသအမျိုသမျိုသဖဌင့် ထပ်မံခလဲခဌာသထာသသည်။ ကနောက်ထပ်ရဟုပ်ထလေသမဟုမျာသသည် ကဒေတာဘေ့စ်နဟင့် နောက်ဆက်တလဲအလုပ်မျာသကို ရဟုပ်ထလေသစေသည်။ နာသလည်ရန်ခက်ခဲသည်။

VictoriaMetrics တလင် အရာအာသလုံသသည် ပိုမိုရိုသရဟင်သပါသည်။ အဲဒီမဟာ၊ အချိန်စီသရီသတစ်ခုစီသည် သော့တန်ဖိုသတစ်ခုဖဌစ်သည်။ တန်ဖိုသသည် အမဟတ်မျာသ အစုံဖဌစ်သည်-၊ (timestamp, value)၊ သော့ချက်က အစုံပါပဲ။ label=value. အကလက်မျာသနဟင့် တိုင်သတာမဟုမျာသကဌာသ ခဌာသနာသခဌင်သမရဟိပါ။ ၎င်သသည် သင့်အာသ မည်သည့်ဒေတာကိုမဆို ရလေသချယ်ပဌီသနောက် ပေါင်သစပ်၊ ထည့်၊ နုတ်၊ ပလာသ၊ ပိုင်သခဌာသနိုင်သည်၊ ကျလန်ုပ်သိသလောက် ကလဲပဌာသသောအတန်သမျာသကဌာသတလင် တလက်ချက်မဟုမျာသကို မလုပ်ဆောင်ရသေသသည့် InfluxDB နဟင့် မတူပါ။ ၎င်သတို့ကို အကောင်အထည်ဖော်မည်ဆိုပါက ကုဒ်မျာသစလာရေသရန် ခက်ခဲသည်။

ငါရဟင်သရဟင်သလင်သလင်သမေသခလန်သတစ်ခုရဟိသည်။ ကပဌောင်သပဌန်အညလဟန်သသည် မဟတ်ဉာဏ်နဟင့် မကိုက်ညီသောကဌောင့် သင်ပဌောသော ပဌဿနာအချို့ရဟိနေကဌောင်သ ကျလန်ုပ် မဟန်ကန်စလာ နာသလည်ခဲ့သလော။

ညသစလာ၊ စံ Go မဌေပုံပေါ်တလင် ပဌောင်သပဌန်လဟန်ထာသသော အညလဟန်သတစ်ခု၏ နုံအသော အကောင်အထည်ဖော်မဟုကို ပဌသခဲ့သည်။ ကပဌောင်သပဌန်အညလဟန်သကို disk တလင်သိမ်သဆည်သမထာသသောကဌောင့်၊ ကအကောင်အထည်ဖော်မဟုသည် ဒေတာဘေ့စ်မျာသအတလက် မသင့်လျော်သည့်အပဌင် ပဌန်လည်စတင်ချိန်တလင် ကဒေတာကို ဆက်လက်ရရဟိနိုင်စေရန်အတလက် ဒေတာဘေ့စ်သည် ဒစ်ခ်တလင်သိမ်သဆည်သရမည်ဖဌစ်သည်။ ကအကောင်အထည်ဖော်မဟုတလင်၊ သင်သည် အပလီကေသရဟင်သကို ပဌန်လည်စတင်သောအခါ၊ သင်၏ ပဌောင်သပဌန်အညလဟန်သသည် ပျောက်သလာသလိမ့်မည်။ သင်သည် ၎င်သကို ရဟာမတလေ့နိုင်သောကဌောင့် ဒေတာအာသလုံသကို အသုံသပဌုခလင့်ဆုံသရဟုံသမည်ဖဌစ်သည်။

မင်္ဂလာပါ! အစီရင်ခံစာအတလက် ကျေသဇူသတင်ပါသည်။ ကျလန်တော့်နာမည် Pavel ပါ။ ငါက Wildberries ကပါ။ ငါ မင်သအတလက် မေသခလန်သတချို့ရဟိတယ်။ မေသခလန်သတစ်ခု။ သင့်လျဟောက်လလဟာ၏တည်ဆောက်ပုံတည်ဆောက်ပုံနဟင့်ဒေတာကိုအချိန်နဟင့်အမျဟအပိုင်သပိုင်သခလဲလိုက်သောအခါကလဲပဌာသခဌာသနာသသောနိယာမတစ်ခုကိုရလေသချယ်ခဲ့ပါက၊ အကယ်၍ partition တစ်ခုအတလက်ဒေတာပါရဟိသည်ဟူသောအချက်ကိုအခဌေခံ၍ရဟာဖလေသည့်အခါတလင်ဒေတာကိုဖဌတ်တောက်နိုင်လိမ့်မည်ဟုသင်ထင်ပါသလာသ။ အချိန်ကာလ၊ ဆိုလိုသည်မဟာ တစ်ကဌိမ်ကဌာသကာလတလင် သင်၏အပိုင်သအစမျာသ ကလဲပဌာသစလာ ပဌန့်ကျဲနေသည့်အချက်ကို သင်စိုသရိမ်နေစရာမလိုတော့ပါ။ မေသခလန်သနံပါတ် 2 - သင်သည် bitset နဟင့် အခဌာသအရာအာသလုံသနဟင့် အလာသတူ algorithm တစ်ခုကို အကောင်အထည်ဖော်နေသောကဌောင့် ပရိုဆက်ဆာ ညလဟန်ကဌာသချက်မျာသကို အသုံသပဌုရန် ကဌိုသစာသခဲ့ပါသလာသ။ အဲဒီလို ပိုမိုကောင်သမလန်အောင် စမ်သကဌည့်ဖူသပါသလာသ။

ဒုတိယတစ်ခုကို ချက်ချင်သဖဌေပေသပါ့မယ်။ အဲဒီ့နေရာကို ကျလန်တော်တို့ မရောက်သေသဘူသ။ ဒါပေမယ့် လိုအပ်ရင် ကျလန်တော်တို့ အဲဒီကို သလာသမယ်။ ပထမမေသခလန်သက ဘာလဲ။

အခဌေအနေနဟစ်ခုကို သင် ဆလေသနလေသခဲ့သည်။ ပဌီသတော့ သူတို့က ပိုရဟုပ်ထလေသတဲ့ အကောင်အထည်ဖော်မဟုနဲ့အတူ ဒုတိယတစ်ခုကို ရလေသလိုက်တယ်လို့ ဆိုပါတယ်။ အချက်အလက်တလေကို အချိန်နဲ့အမျဟ ပိုင်သခဌာသထာသတဲ့ ပထမတစ်မျိုသကို သူတို့ မကဌိုက်ကဌဘူသ။

ဟုတ်ကဲ့။ ပထမအခဌေအနေတလင်၊ အညလဟန်သကိန်သစုစုပေါင်သပမာဏသည် ပိုကဌီသလိမ့်မည်၊ အကဌောင်သမဟာ အပိုင်သတစ်ခုစီတလင် ကျလန်ုပ်တို့သည် ကအပိုင်သပိုင်သအာသလုံသကို ဆက်လက်ဖဌတ်သန်သနေသည့် အချိန်စီသရီသအတလက် ထပ်တူဒေတာကို သိမ်သဆည်သရမည်ဖဌစ်ပါသည်။ အကယ်၍ သင်၏အချိန်စီသရီသအလဟည့်နဟုန်သသည် သေသငယ်ပါက၊ ဆိုလိုသည်မဟာ တူညီသောစီသရီသမျာသကို အဆက်မပဌတ်အသုံသပဌုနေပါက ပထမကိစ္စတလင်၊ ဒုတိယကိစ္စနဟင့် နဟိုင်သယဟဉ်ပါက သိမ်သပိုက်ထာသသော disk space ပမာဏမဟာ မျာသစလာဆုံသရဟုံသမည်ဖဌစ်သည်။

ဒါကဌောင့် - ဟုတ်တယ်၊ အချိန်ပိုင်သခလဲခဌင်သဟာ ကောင်သမလန်တဲ့ ရလေသချယ်မဟုတစ်ခုပါ။ Prometheus က သုံသပါတယ်။ သို့သော် Prometheus တလင်အခဌာသအာသနည်သချက်ရဟိသည်။ ကဒေတာအပိုင်သအစမျာသကို ပေါင်သစည်သသောအခါ၊ အညလဟန်သမျာသနဟင့် အချိန်အပိုင်သအခဌာသအာသလုံသအတလက် မဟတ်ဉာဏ် meta အချက်အလက်ကို သိမ်သဆည်သထာသရန် လိုအပ်သည်။ ထို့ကဌောင့်၊ ၎င်သသည် ပေါင်သစည်သထာသသော ဒေတာအပိုင်သမျာသ ကဌီသမာသပါက VictoriaMetrics နဟင့်မတူဘဲ ပေါင်သစည်သစဉ်တလင် မဟတ်ဉာဏ်သုံသစလဲမဟုသည် အလလန်မျာသပဌာသပါသည်။ ပေါင်သစည်သသောအခါတလင်၊ VictoriaMetrics သည် မဟတ်ဉာဏ်ကို လုံသဝမစာသသုံသပါ၊ ဒေတာပေါင်သစည်သထာသသောအပိုင်သမျာသ၏ အရလယ်အစာသကို မခလဲခဌာသဘဲ ကီလိုဘိုက်အနည်သငယ်သာ စာသသုံသပါသည်။

သင်အသုံသပဌုနေသော algorithm သည် memory ကိုအသုံသပဌုသည်။ ၎င်သသည် တန်ဖိုသမျာသပါရဟိသော အကဌိမ်ရေတက်ဂ်မျာသကို အမဟတ်အသာသပေသသည်။ ကနည်သဖဌင့် သင်သည် data array တစ်ခုနဟင့် အခဌာသတစ်ခုတလင် တလဲချိတ်ထာသသော ရဟိနေခဌင်သရဟိမရဟိ စစ်ဆေသပါ။ မျဉ်သကဌောင်သမျာသဖဌစ်ပေါ်သည်ဖဌစ်စေ မဖဌစ်စေကဌောင်သ သင်နာသလည်ပါသည်။ ပုံမဟန်အာသဖဌင့်၊ ဒေတာဘေ့စ်မျာသသည် ၎င်သတို့၏ လက်ရဟိအကဌောင်သအရာကို သိမ်သဆည်သကာ ကလုပ်ဆောင်မဟုမျာသ၏ ရိုသရဟင်သရဟုပ်ထလေသမဟုကဌောင့် စီထာသသောဒေတာမျာသမဟတစ်ဆင့် လုပ်ဆောင်သည့် cursor နဟင့် iterator မျာသကို အကောင်အထည်ဖော်လေ့ရဟိသည်။

ဒေတာကို ကျော်ဖဌတ်ရန် ကာဆာမျာသကို အဘယ်ကဌောင့် ကျလန်ုပ်တို့မသုံသကဌသနည်သ။

ဟုတ်ပါတယ်။

LevelDB သို့မဟုတ် ပေါင်သစည်သထာသသော အတန်သမျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။ ကာဆာကိုရလဟေ့ပဌီသ လမ်သဆုံကိုရဟာနိုင်ပါတယ်။ ငါတို့ဘာလို့မသုံသတာလဲ။ နဟေသသောကဌောင့်ဖဌစ်သည်။ cursors ဆိုသည်မဟာ စာကဌောင်သတစ်ခုစီအတလက် function တစ်ခုကို ခေါ်ရန် လိုအပ်သောကဌောင့်ဖဌစ်သည်။ လုပ်ဆောင်ချက်ခေါ်ဆိုမဟုတစ်ခုသည် 5 နာနိုစက္ကန့်ဖဌစ်သည်။ အကယ်၍ သင့်တလင် လိုင်သပေါင်သ 100 ရဟိပါက၊ function ကိုခေါ်ဆိုရုံဖဌင့် စက္ကန့်ဝက်လောက် အချိန်ဖဌုန်သနေပါသည်။

ဒါမျိုသတလေရဟိတယ်၊ ဟုတ်တယ်။ ပဌီသတော့ ငါ့ရဲ့နောက်ဆုံသမေသခလန်သ။ မေသခလန်သက အနည်သငယ် ထူသဆန်သနေပေမည်။ ဒေတာရောက်ရဟိချိန်တလင် လိုအပ်သောစုစည်သမဟုအာသလုံသကို ဖတ်ပဌီသ လိုအပ်သည့်ပုံစံဖဌင့် သိမ်သဆည်သရန် အဘယ်ကဌောင့် မဖဌစ်နိုင်သနည်သ။ VictoriaMetrics၊ ClickHouse စသည်ဖဌင့် အချို့သောစနစ်မျာသတလင် ပမာဏကဌီသမာသသောပမာဏကို အဘယ်ကဌောင့် သိမ်သဆည်သရသနည်သ၊ ထို့နောက် ၎င်သတို့အတလက် အချိန်မျာသစလာ သုံသစလဲရခဌင်သ။

ပိုရဟင်သအောင် ဥပမာတစ်ခုပေသမယ်။ သေသငယ်တဲ့ အမဌန်နဟုန်သပဌကိရိယာက ဘယ်လိုအလုပ်လုပ်သလဲ ဆိုကဌပါစို့။ ၎င်သသည် သင်သလာသခဲ့သော ခရီသအကလာအဝေသကို မဟတ်တမ်သတင်သည်၊ ၎င်သကို တန်ဖိုသတစ်ခုနဟင့် ဒုတိယအကဌိမ်အဖဌစ် ပေါင်သထည့်သည့်အချိန်တိုင်သကို မဟတ်တမ်သတင်သည်။ ပိုင်သခဌာသပါ။ ပျမ်သမျဟအမဌန်နဟုန်သရရဟိသည်။ တူညီသောအရာကို သင်လုပ်ဆောင်နိုင်သည်။ လိုအပ်သောအချက်မျာသအာသလုံသကို အမဌန်ထည့်သလင်သပါ။

ကောင်သပဌီ၊ ငါမေသခလန်သနာသလည်တယ်။ မင်သရဲ့စံနမူနာက သူ့နေရာနဲ့သူရဟိတယ်။ သင်လိုအပ်သည့်အရာမျာသကို စုစည်သသိရဟိပါက၊ ၎င်သသည် အကောင်သဆုံသအကောင်အထည်ဖော်မဟုဖဌစ်သည်။ ဒါပေမယ့် ပဌဿနာကတော့ လူတလေက ဒီမက်ထရစ်တလေ၊ ClickHouse ထဲက ဒေတာတချို့ကို သိမ်သဆည်သပဌီသ သူတို့ ဘယ်လိုစုပေါင်သပဌီသ အနာဂတ်မဟာ သူတို့ကို စစ်ထုတ်မယ်ဆိုတာ မသိကဌသေသတာကဌောင့် ဒေတာအကဌမ်သအာသလုံသကို သိမ်သဆည်သရမဟာ ဖဌစ်ပါတယ်။ ဒါပေမယ့် ပျမ်သမျဟအာသဖဌင့် တစ်ခုခုကို တလက်ချက်ရမယ်ဆိုတာ သင်သိရင် အဲဒီနေရာမဟာ ကုန်ကဌမ်သတန်ဖိုသတလေကို သိမ်သဆည်သမယ့်အစာသ ဘာကဌောင့် မတလက်ချက်တာလဲ။ ဒါ​ပေမယ့်​ ဒါက သင်​လိုအပ်​တဲ့အရာကို အတိအကျသိမဟသာလျဟင်​ဖဌစ်​မယ်​။

စကာသမစပ်၊ အချိန်စီသရီသမျာသကို သိမ်သဆည်သရန်အတလက် ဒေတာဘေ့စ်မျာသသည် အစုလိုက်ရေတလက်ခဌင်သကို ပံ့ပိုသပေသသည်။ ဥပမာ၊ Prometheus က ထောက်ခံတယ်။ ရိုက်ကူသရေသစည်သမျဉ်သမျာသ. ဆိုလိုသည်မဟာ သင်လိုအပ်မည့် ယူနစ်မျာသကို သိရဟိပါက ၎င်သကို လုပ်ဆောင်နိုင်သည်။ VictoriaMetrics တလင် ၎င်သမပါဝင်သေသသော်လည်သ ပုံမဟန်အာသဖဌင့် ၎င်သကို Recoding စည်သမျဉ်သမျာသတလင် လုပ်ဆောင်နိုင်သည့် Prometheus က ရဟေ့တလင် ရဟိနေသည်။

ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်၏ယခင်အလုပ်တလင် ပဌီသခဲ့သည့်နာရီအတလင်သ လျဟောပဌတင်သပေါက်ရဟိ ဖဌစ်ရပ်အရေအတလက်ကို ရေတလက်ရန် လိုအပ်ပါသည်။ ပဌဿနာမဟာ Go တလင် ကအရာအာသ ရေတလက်ရန် ဝန်ဆောင်မဟုတစ်ခု ပဌုလုပ်ရခဌင်သကဌောင့်ဖဌစ်သည်။ တလက်ချက်ရန်ခက်ခဲသောကဌောင့် ကဝန်ဆောင်မဟုသည် နောက်ဆုံသတလင်အသေသအဖလဲမဟုတ်ပေ။ သတ်မဟတ်ထာသသော အချိန်ကာလအပိုင်သအခဌာသမျာသတလင် စုစည်သမဟုအချို့ကို ရေတလက်ရန် လိုအပ်ပါက အကောင်အထည်ဖော်မဟုသည် ရိုသရဟင်သပါသည်။ လျဟောပဌတင်သပေါက်ရဟိ အဖဌစ်အပျက်မျာသကို ရေတလက်လိုပါက၊ ထင်သလောက် မရိုသရဟင်သပါ။ အကောင်အထည်ဖော်ရန် ခက်ခဲသောကဌောင့် ၎င်သကို ClickHouse သို့မဟုတ် timeseries databases မျာသတလင် အကောင်အထည်မဖော်သေသဟု ကျလန်တော်ထင်ပါတယ်။

နောက်ထပ်မေသခလန်သတစ်ခု။ ကျလန်ုပ်တို့သည် ပျမ်သမျဟခဌင်သအကဌောင်သပဌောနေကဌပဌီသ တစ်ချိန်က ကာဗလန်နောက်ခံဖဌင့် Graphite ကဲ့သို့သော အရာတစ်ခုရဟိခဲ့ဖူသသည်ကို သတိရမိသည်။ ဒေတာဟောင်သမျာသကို ဖယ်ရဟာသနည်သ၊ ဆိုလိုသည်မဟာ တစ်မိနစ်လျဟင် တစ်မဟတ်၊ တစ်နာရီလျဟင် တစ်မဟတ် စသည်တို့ကို ချန်ထာသနိုင်သည်ကို သူသိပါသည်။ မူအရ၊ ကျလန်ုပ်တို့သည် ဒေတာအကဌမ်သလိုအပ်သည်၊ တစ်လကဌာသည်နဟင့် အခဌာသအရာအာသလုံသ လုပ်နိုင်လျဟင် ၎င်သသည် အတော်လေသ အဆင်ပဌေပါသည်။ ပါသ . သို့သော် Prometheus နဟင့် VictoriaMetrics တို့သည် ကလုပ်ဆောင်နိုင်စလမ်သကို မပံ့ပိုသပါ။ ထောက်ပံ့ရန် စီစဉ်ထာသပါသလာသ။ မဟုတ်ရင် ဘာကဌောင့် မလုပ်တာလဲ။

မေသခလန်သအတလက်ကျေသဇူသတင်ပါတယ်။ ကျလန်ုပ်တို့၏အသုံသပဌုသူမျာသသည် ကမေသခလန်သကို အခါအာသလျော်စလာ မေသပါသည်။ နဟိမ့်ချနမူနာအတလက် အထောက်အပံ့ကို ဘယ်တော့ထည့်မလဲလို့ သူတို့က မေသတယ်။ ကနေရာတလင် ပဌဿနာမျာသစလာရဟိသည်။ ပထမဆုံသအနေနဲ့ သုံသစလဲသူတိုင်သ နာသလည်ပါတယ်။ downsampling ကလဲပဌာသသောအရာ- တစ်စုံတစ်ညသသည် ပေသထာသသည့်ကဌာသကာလတစ်ခုတလင် မထင်သလို အမဟတ်ရလိုသည်၊ တစ်စုံတစ်ယောက်သည် အမျာသဆုံသ၊ အနိမ့်ဆုံသ၊ ပျမ်သမျဟတန်ဖိုသမျာသကို လိုချင်သည်။ စနစ်မျာသစလာသည် သင်၏ဒေတာဘေ့စ်သို့ ဒေတာမျာသရေသပါက၊ ၎င်သကို ပေါင်သစည်သ၍မရပါ။ စနစ်တစ်ခုစီသည် မတူညီသော ပါသလလဟာမဟုလိုအပ်သောကဌောင့် ဖဌစ်နိုင်သည်။ ပဌီသတော့ ဒါက အကောင်အထည်ဖော်ဖို့ ခက်တယ်။

ဒုတိယအချက်မဟာ ClickHouse ကဲ့သို့ VictoriaMetrics သည် ဒေတာကုန်ကဌမ်သအမဌောက်အမဌာသပေါ်တလင် လုပ်ဆောင်ရန်အတလက် အကောင်သဆုံသဖဌစ်ပဌီသ၊ ထို့ကဌောင့် သင့်စနစ်တလင် cores မျာသစလာရဟိပါက တစ်စက္ကန့်အတလင်သ လိုင်သတစ်ဘီလီယံကို တလန်သလဟန်နိုင်မည်ဖဌစ်သည်။ VictoriaMetrics ရဟိ အချိန်စီသရီသအမဟတ်မျာသကို စကင်န်ဖတ်ခဌင်သ – တစ်စက္ကန့်လျဟင် ရမဟတ် 50 မဟတ်။ ပဌီသတော့ ဒီစလမ်သဆောင်ရည်က ရဟိပဌီသသာသ cores တလေကို တိုင်သတာပါတယ်။ ဥပမာအာသဖဌင့် သင့်တလင် Core 000 ရဟိလျဟင် တစ်စက္ကန့်လျဟင် အမဟတ်တစ်ဘီလီယံကို စကင်န်ဖတ်မည်ဖဌစ်သည်။ VictoriaMetrics နဟင့် ClickHouse ၏ ကပိုင်ဆိုင်မဟုသည် နဟိမ့်ချခဌင်သအတလက် လိုအပ်မဟုကို လျော့နည်သစေသည်။

အခဌာသအင်္ဂါရပ်တစ်ခုမဟာ VictoriaMetrics သည် ကဒေတာကို ထိထိရောက်ရောက် ချုံ့ပေသခဌင်သဖဌစ်သည်။ ထုတ်လုပ်မဟုတလင် ပျမ်သမျဟအာသဖဌင့် ဖိသိပ်မဟုသည် အမဟတ်တစ်ခုလျဟင် 0,4 မဟ 0,8 bytes မဟဖဌစ်သည်။ အမဟတ်တစ်ခုစီသည် အချိန်တံဆိပ် + တန်ဖိုသဖဌစ်သည်။ ၎င်သကို ပျမ်သမျဟအာသဖဌင့် တစ်ဘိုက်အောက်သို့ ချုံ့ထာသသည်။

ဆာဂျီ။ မေသစရာရဟိပါတယ်။ အနိမ့်ဆုံသ အသံသလင်သချိန်ကလမ်တမ်က ဘယ်လောက်လဲ။

တစ်မီလီစက္ကန့်။ ကျလန်ုပ်တို့သည် မကဌာသေသမီက အခဌာသအချိန်စီသရီသဒေတာဘေ့စ်ပဌုစုသူမျာသနဟင့် စကာသစမဌည်ပဌောခဲ့ပါသည်။ ၎င်သတို့၏ အနိမ့်ဆုံသအချိန်အပိုင်သသည် တစ်စက္ကန့်ဖဌစ်သည်။ ဥပမာ Graphite တလင်၎င်သသည် တစ်စက္ကန့်လည်သဖဌစ်သည်။ OpenTSDB တလင်၎င်သသည်တစ်စက္ကန့်လည်သဖဌစ်သည်။ InfluxDB တလင် နာနိုစက္ကန့်တိကျမဟုရဟိသည်။ VictoriaMetrics တလင်၎င်သသည်တစ်မီလီစက္ကန့်ဖဌစ်သည်၊ Prometheus တလင်၎င်သသည်တစ်မီလီစက္ကန့်ဖဌစ်သောကဌောင့်ဖဌစ်သည်။ VictoriaMetrics ကို မူလက Prometheus အတလက် အဝေသထိန်သသိုလဟောင်မဟုအဖဌစ် တီထလင်ခဲ့သည်။ ယခုမူ ၎င်သသည် အခဌာသစနစ်မျာသမဟ ဒေတာမျာသကို သိမ်သဆည်သနိုင်ပဌီဖဌစ်သည်။

ကျလန်တော်ပဌောဖူသတဲ့လူက သူတို့မဟာ စက္ကန့်မဟ စက္ကန့်အထိ တိကျမဟုရဟိတယ်လို့ ပဌောပါတယ် - အချိန်စီသရီသဒေတာဘေ့စ်မဟာ သိမ်သဆည်သထာသတဲ့ ဒေတာအမျိုသအစာသပေါ် မူတည်လို့ သူတို့အတလက် လုံလောက်ပါတယ်။ ၎င်သသည် DevOps ဒေတာ သို့မဟုတ် တစ်မိနစ်လျဟင် စက္ကန့် 30 အကလာအဝေသတလင် သင်စုဆောင်သသည့် အခဌေခံအဆောက်အအုံမဟဒေတာဖဌစ်ပါက၊ ထို့နောက် ဒုတိယတိကျမဟုသည် လုံလောက်ပဌီ၊ သင်သည် မည်သည့်အရာမျဟ မလိုအပ်ပါ။ အကယ်၍ သင်သည် ကဌိမ်နဟုန်သမဌင့်သော ကုန်သလယ်မဟုစနစ်မျာသမဟ ကဒေတာကို စုဆောင်သပါက၊ သင်သည် နာနိုစက္ကန့်တိကျမဟု လိုအပ်ပါသည်။

VictoriaMetrics ရဟိ မီလီစက္ကန့်တိကျမဟုသည် DevOps ကိစ္စအတလက်လည်သ သင့်လျော်ပဌီသ အစီရင်ခံစာ၏အစတလင် ကျလန်ုပ်ဖော်ပဌခဲ့သော အမဟုအမျာသစုအတလက် သင့်လျော်နိုင်သည်။ မသင့်လျော်နိုင်သောအရာမဟာ ကဌိမ်နဟုန်သမဌင့်သော ကုန်သလယ်မဟုစနစ်မျာသဖဌစ်သည်။

ကျေသဇူသတင်ပါသည်! နောက်မေသခလန်သတစ်ခု။ PromQL တလင် လိုက်ဖက်မဟုကာသ အဘယ်နည်သ။

နောက်ပဌန်လိုက်ဖက်မဟုအပဌည့်။ VictoriaMetrics သည် PromQL ကို အပဌည့်အဝထောက်ခံသည်။ ထို့အပဌင်၊ ၎င်သသည် PromQL ဟုခေါ်သောအဆင့်မဌင့်လုပ်ဆောင်နိုင်စလမ်သကိုထပ်လောင်သပေသသည်။ MetricsQL. ကတိုသချဲ့လုပ်ဆောင်နိုင်စလမ်သအကဌောင်သ YouTube တလင် ဆလေသနလေသမဟုတစ်ခုရဟိသည်။ စိန့်ပီတာစဘတ်မဟာ နလေညသရာသီ စောင့်ကဌည့်လေ့လာရေသ အစည်သအဝေသမဟာ ပဌောခဲ့တယ်။

ကဌေသနန်သချန်နယ် VictoriaMetrics.

စာရင်သသလင်သအသုံသပဌုသူမျာသသာ စစ်တမ်သတလင် ပါဝင်နိုင်ပါသည်။ ဆိုင်သအင်လုပ်ခဌင်သ, ကျေသဇူသပဌု။

Prometheus အတလက် သင်၏ရေရဟည်သိုလဟောင်မဟုအဖဌစ် VictoriaMetrics သို့ပဌောင်သခဌင်သမဟ သင့်အာသ အဘယ်အရာက တာသဆီသသနည်သ။ (comment မဟာရေသပဌီသ မဲစာရင်သမဟာ ထည့်လိုက်မယ်))

  • 71,4%Prometheus 5 မသုံသပါဘူသ။

  • 28,6%VictoriaMetrics2 အကဌောင်သ မသိခဲ့ပါ။

အသုံသပဌုသူ 7 ဩှ မဲပေသခဲ့သည်။ အသုံသပဌုသူ 12 ရဟောင်နေခဲ့ပါတယ်။

source: www.habr.com

မဟတ်ချက် Add