Dragonfly in-memory ကက်ရှ်နှင့် သိုလှောင်မှုစနစ်သည် ဒေတာကို သော့/တန်ဖိုး ဖော်မတ်ဖြင့် စီမံဆောင်ရွက်ပေးပြီး အလွန် loaded site များ၏ အလုပ်များကို အရှိန်မြှင့်ရန်၊ နှေးကွေးသော DBMS နှင့် RAM အတွင်းရှိ အလယ်အလတ်ဒေတာများကို သိမ်းဆည်းရန်အတွက် ပေါ့ပါးသော ဖြေရှင်းချက်အဖြစ် အသုံးပြုနိုင်ပါသည်။ Dragonfly သည် ကုဒ်ကို ပြန်လည်လုပ်ဆောင်ခြင်းမရှိဘဲ Memcached နှင့် Redis ပရိုတိုကောများကို ပံ့ပိုးပေးသည်
Redis နှင့် နှိုင်းယှဉ်ပါက Dragonfly သည် Amazon EC2 c6gn.16xlarge ပတ်ဝန်းကျင်ရှိ ပုံမှန်အလုပ်များများအတွက် စွမ်းဆောင်ရည် 25 ဆ (တစ်စက္ကန့်လျှင် တောင်းဆိုမှု 3.8 သန်း) ကို ရရှိခဲ့သည်။ AWS c6gn.16xlarge ဝန်းကျင်ရှိ Memcached နှင့် နှိုင်းယှဉ်ပါက Dragonfly သည် တစ်စက္ကန့်လျှင် စာရေးတောင်းဆိုမှုများ 4.7 ဆ (3.8 သန်းနှင့် 806) နှင့် တစ်စက္ကန့်လျှင် ဖတ်ရှုမှုတောင်းဆိုမှု 1.77 ဆ (3.7 သန်းနှင့် 2.1 သန်း) ပိုမိုလုပ်ဆောင်နိုင်ခဲ့သည်။
ဒေတာ 5 GB သိမ်းဆည်းရန်အတွက် စမ်းသပ်မှုများတွင် Dragonfly သည် Redis ထက် 30% ပိုနည်းသော memory လိုအပ်သည်။ “bgsave” အမိန့်ဖြင့် လျှပ်တစ်ပြက်ရိုက်ချက်များကို ဖန်တီးသောအခါ၊ မှတ်ဉာဏ်သုံးစွဲမှု တိုးလာသော်လည်း အထွတ်အထိပ်အခိုက်အတန့်တွင် ၎င်းသည် Redis ထက် သုံးဆနီးပါး လျော့နည်းနေကာ လျှပ်တစ်ပြက်မှတ်တမ်းတင်ခြင်းလုပ်ဆောင်ချက်သည် ပိုမိုမြန်ဆန်သည် (စမ်းသပ်မှုတွင်၊ Dragonfly တွင် လျှပ်တစ်ပြက်တစ်ပုံကို 30 တွင် ရေးထားသည်။ စက္ကန့်၊ Redis - 42 စက္ကန့်အတွင်း။
အရင်းအမြစ်များကို မျှဝေခြင်းမရှိဘဲ (မျှမမျှဝေဘဲ) အစုံလိုက်တည်ဆောက်မှုဖြင့် မြင့်မားသောစွမ်းဆောင်ရည်ကို ရရှိသည်၊ ဆိုလိုသည်မှာ thread တစ်ခုစီအား ၎င်း၏ကိုယ်ပိုင်အပိုင်းနှင့်အတူ သီးခြားစီစဥ်သည့်ဒေတာခွဲဝေပေးသည့် ပရိုဆက်ဆာတစ်ခုအား ပေးအပ်ထားပြီး၊ mutexes နှင့် spin locks များမပါဘဲ အလုပ်လုပ်ပါသည်။ သော့များစွာဖြင့် အလုပ်လုပ်သောအခါ အနုမြူကို သေချာစေရန်၊ ပေါ့ပါးသော VLL သော့ခလောက်များကို အသုံးပြုသည်။ အချက်အလက်များကို မှတ်ဉာဏ်တွင် ထိရောက်စွာသိမ်းဆည်းနိုင်ရန်၊ အပိုင်းပိုင်းခွဲထားသော hash table အမျိုးအစားကို အကောင်အထည်ဖေါ်သည့် dashtable ဖွဲ့စည်းပုံကို အသုံးပြုပါသည်။
Dragonfly ၏အင်္ဂါရပ်အချို့
- အခမဲ့မှတ်ဉာဏ် ကုန်သွားပြီးနောက် ဒေတာအဟောင်းများကို ဒေတာအသစ်ဖြင့် အလိုအလျောက် အစားထိုးသည့် Caching မုဒ်။
- ဒေတာကိုသက်ဆိုင်ရာဟုယူဆသည့်ကာလအတွင်း တစ်သက်တာဒေတာနှင့် ချိတ်ဆက်မှုအတွက် ပံ့ပိုးမှု။
- ပြန်လည်စတင်ပြီးနောက် နောက်ပိုင်းတွင် ပြန်လည်ရယူရန်အတွက် နောက်ခံရှိ သိုလှောင်မှုအခြေအနေကို ဒစ်ခ်သို့ ဆွဲချခြင်းအတွက် ပံ့ပိုးမှု။
- စနစ်စီမံခန့်ခွဲမှုအတွက် HTTP ကွန်ဆိုးလ်တစ်ခုရှိနေခြင်း (TCP ဆိပ်ကမ်း 6379 သို့ ချိတ်ဆက်ထားသည်) နှင့် Prometheus နှင့် တွဲဖက်အသုံးပြုနိုင်သော မက်ထရစ်များ ပြန်ပေးရန်အတွက် API တစ်ခုရှိသည်။
- Redis 185 ထုတ်ဝေမှု၏ လုပ်ဆောင်နိုင်စွမ်းနှင့် အကြမ်းအားဖြင့် ညီမျှသည့် 5 Redis အမိန့်များကို ပံ့ပိုးပေးသည်။
- CAS ( check-and-set) မှလွဲ၍ Memcached command အားလုံးကို ပံ့ပိုးပေးသည်။
- လျှပ်တစ်ပြက်ရိုက်ချက်များဖန်တီးရန်အတွက် အညီအမျှလုပ်ဆောင်မှုများအတွက် ပံ့ပိုးမှု။
- ကြိုတင်ခန့်မှန်းနိုင်သော မှတ်ဉာဏ်သုံးစွဲမှု။
- Built-in Lua 5.4 စကားပြန်။
- ဟက်ရှ်များ၊ အစုံများ၊ စာရင်းများ (ZSET၊ HSET၊ LIST၊ SETS နှင့် STRING) နှင့် JSON ဒေတာကဲ့သို့သော ရှုပ်ထွေးသောဒေတာအမျိုးအစားများကို ပံ့ပိုးပေးသည်။
- အမှားခံနိုင်ရည်ရှိမှုနှင့် load ချိန်ခွင်လျှာအတွက် သိုလှောင်မှုပုံတူပွားမှုကို ပံ့ပိုးပေးသည်။
Dragonfly ကုဒ်ကို C/C++ ဖြင့် ရေးသားထားပြီး BSL (Business Source License) အောက်တွင် ဖြန့်ဝေထားသည်။ BSL လိုင်စင်ကို Open Core မော်ဒယ်အတွက် အစားထိုးအဖြစ် MySQL ၏ ပူးတွဲတည်ထောင်သူများမှ အဆိုပြုခဲ့သည်။ BSL ၏အနှစ်သာရမှာ အဆင့်မြင့်လုပ်ဆောင်နိုင်စွမ်း၏ကုဒ်ကို ပြုပြင်မွမ်းမံရန်အတွက် ကနဦးရနိုင်သော်လည်း၊ ရှောင်တိမ်းရန် ကူးသန်းရောင်းဝယ်ရေးလိုင်စင်ကို ဝယ်ယူရန်လိုအပ်သည့် ထပ်လောင်းအခြေအနေများပြည့်မီမှသာ အချိန်အတော်ကြာ အခမဲ့အသုံးပြုနိုင်ပါသည်။ Dragonfly ပရောဂျက်အတွက် ထပ်လောင်းလိုင်စင်စည်းကမ်းချက်များသည် မတ်လ 2.0၊ 15 ရက်နေ့တွင် Apache 2028 လိုင်စင်သို့ ကုဒ်ကို လွှဲပြောင်းရန် လိုအပ်သည်။ ယခုအချိန်အထိ၊ လိုင်စင်သည် ၎င်း၏ဝန်ဆောင်မှုများနှင့် ထုတ်ကုန်များ၏ လည်ပတ်မှုကို သေချာစေရန်အတွက်သာ ကုဒ်ကို အသုံးပြုခွင့်ပြုသော်လည်း Dragonfly ၏ အပိုပရိုဂရမ်အဖြစ် လုပ်ဆောင်သည့် အခပေး cloud ဝန်ဆောင်မှုများ ဖန်တီးခြင်းအတွက် အသုံးပြုခြင်းကို တားမြစ်ထားသည်။
ဗားရှင်း Dragonfly 1.0 သည် ပင်မဆာဗာမှ အလယ်တန်းတစ်ခုသို့ ဒေတာကူးယူခြင်းအတွက် အထောက်အပံ့ကို အကောင်အထည်ဖော်ခြင်းအတွက် မှတ်သားဖွယ်ဖြစ်သည်။ သို့သော်လည်း Dragonfly သည် Dragonfly ကိုအခြေခံ၍ သို့မဟုတ် Redis ကိုအခြေခံ၍ ပင်မဆာဗာတစ်ခုမှဒေတာလက်ခံရရှိသည့်ဒုတိယသိုလှောင်မှုအဖြစ်အသုံးပြုရန်ပြင်ဆင်သတ်မှတ်နိုင်သည်။ ကူးယူခြင်းစီမံခန့်ခွဲမှု API သည် Redis နှင့် သဟဇာတဖြစ်ပြီး ROLE နှင့် REPLICAOF (SLAVEOF) ညွှန်ကြားချက်များကို အသုံးပြုမှုအပေါ် အခြေခံထားသည်။
source: opennet.ru