လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ဖြန့်ဖြူးထားသောထူးခြားသော IDs များထုတ်လုပ်ရန် Snowflake algorithm ကိုအကောင်အထည်ဖော်ရန်လမ်းညွှန်ချက်အပြည့်အစုံ

ဖြန့်ဖြူးထားသောထူးခြားသော IDs များထုတ်လုပ်ရန် Snowflake algorithm ကိုအကောင်အထည်ဖော်ရန်လမ်းညွှန်ချက်အပြည့်အစုံ

gitbox 2025-07-30

Snowflake မှနိဒါန်းနိဒါန်း

The Snowflake algorithm သည်ထူးခြားသောထူးခြားသော ID Generation AlgorithM Open Open Source ကို Twitter တွင်ဖော်ပြထားသည်။ ၎င်းသည်ဖြန့်ဝေထားသောစနစ်များတွင်ထူးခြားသော IDs များထုတ်လုပ်ခြင်းပြ problem နာကိုဖြေရှင်းရန်ဒီဇိုင်းပြုလုပ်ထားသည်။ algorithm သည် 64-bit integer တစ်ခုအနေဖြင့် timestamp, စက် ID နှင့် Self-incoent sequence အစိတ်အပိုင်းများပါ 0 င်သည်။ ဤဆောင်းပါးသည်ဤ algorithm ကိုမည်သို့အကောင်အထည်ဖော်ရန်ဤ algorithm ကိုမည်သို့အကောင်အထည်ဖော်မည်ကိုသရုပ်ပြရန် PHP Code ဥပမာများကိုအသုံးပြုမည်။

Snowflake algorithm ID ၏ဖွဲ့စည်းပုံ

Snowflake တွင် 64-bit id algorithm တွင်အောက်ပါအစိတ်အပိုင်းများပါ 0 င်သည်။

timestamp အစိတ်အပိုင်းတစ်ခု

Timestamps သည် 42 bits 42 ခုနှင့်ကိုယ်စားပြုနိုင်သည့်အချိန်ကာလသည် 2010 ခုနှစ်, ဇန်နဝါရီလ 1 ရက်နေ့အထိ 2039 မှ 2039 အထိဖြစ်သည်။

စက် ID အပိုင်း

စက် ID သည်အပိုင်း (10) ခုနှင့်စက် 1024 ခုအထိထောက်ပံ့သည်။

Self- တိုးမြှင့် sequence ကိုအပိုင်း

Self-incrementing sequence sequence section သည်အပိုင်း 12 ခုနှင့်အများဆုံး 4096 ခုမြောက် IDs အများဆုံး 5096 ခုကိုထုတ်လုပ်သည်။

PHP သည် Snowflake algorithm ကိုအကောင်အထည်ဖော်

ဖြန့်ဖြူးထားသောထူးခြားသော IDs များထုတ်လုပ်ရန် Snowflake algorithm ကိုအကောင်အထည်ဖော်သည့် PHP နမူနာကုဒ်မှာအောက်ပါအတိုင်းဖြစ်သည် -

 
class Snowflake {
    private $machineId; // စက်ယန္တရားID
    private $epoch = 1288834974657; // ကန ဦး timestamp,Timestamp အစိတ်အပိုင်း၏တန်ဖိုးကိုတွက်ချက်ရန်အသုံးပြုခဲ့သည်
    private $sequence = 0; // အမှတ်စဉ်နံပါတ်အပိုင်း

    // လမ်းဆောက်လုပ်ရေး
    public function __construct($machineId) {
        $this->machineId = $machineId;
    }

    // ထူးခွားတဲ့ထုတ်လုပ်ပါID
    public function generateId() {
        $timestamp = $this->getTimestamp();
        $snowflakeId = (($timestamp - $this->epoch) << 22) | ($this->machineId << 12) | $this->sequence;
        return $snowflakeId;
    }

    // လက်ရှိ timestamp ရယူပါ,ယူနစ်မီလီစက္ကန်
    private function getTimestamp() {
        return floor(microtime(true) * 1000);
    }
}

// ဥပမာအသုံးပြုမှု
$snowflake = new Snowflake(1); // 传入စက်ယန္တရားID
$id = $snowflake->generateId();
echo $id;

ဥပမာသုံးသပ်ခြင်း

အထက်ပါကုဒ်တွင် Snowflake ဟုခေါ်သောအတန်းကိုသတ်မှတ်သည်။ ဆောက်လုပ်ရေးသည်စက်ဖုန်းကို parameter တစ်ခုအဖြစ်ယူပြီး၎င်းကိုစာသင်ခန်း၏သီးသန့် variable တစ်ခုတွင်သိုလှောင်ထားသည်။ GenerateID () နည်းလမ်းသည်ထူးခြားသော ID ကိုထုတ်လုပ်ရန်အဓိကအစိတ်အပိုင်းဖြစ်သည်။ ၎င်းသည်လက်ရှိ timestamp ကို ဦး စွာရရှိသည်။ GetTimbestamp () နည်းလမ်းကိုလက်ရှိ timestamp (မီလီစက္ကန့်တွင်) ရရှိရန်အသုံးပြုသည်။ ဥပမာအသုံးပြုမှုတွင်ကျွန်ုပ်တို့သည်စက်ပစ္စည်း ID 1 ဖြင့် Snowflake အရာဝတ်ထုကိုစူးစမ်းလေ့လာပြီး GenerateID () နည်းလမ်းကိုခေါ်ဆိုခြင်းဖြင့်ထူးခြားသည့် ID ကိုဖန်တီးပြီးနောက်ဆုံးရလဒ်ကိုပုံနှိပ်ထုတ်လွှင့်သည်။

အကျဉ်းချုပ်

ဤဆောင်းပါးသည် PHP ကို PHP ကို အသုံးပြု. PHP ကို အသုံးပြု. Snowflake algorithm ကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုအသေးစိတ်ဖော်ပြထားသည်။ ဤနည်းဖြင့်ထုတ်ပေးသော ID သည်ထူးခြားမှုနှင့်အချည်းနှီးသက်ရှိများရှိပြီးဖြန့်ဝေထားသောစနစ်များတွင်အမျိုးမျိုးသောအခြေအနေများအတွက်သင့်တော်သည်။ Snowflake algorithm ၏အဓိကအယူအဆသည်ထုတ်လုပ်ပြီး ID တစ်ခုစီသည်ထူးခြားသည့်မျိုးဆက်သစ်များကိုသေချာစေရန် ID များကိုထုတ်လုပ်ရန် ID များကိုထုတ်လုပ်ရန် Timestamps, Machine နံပါတ်များကိုအသုံးပြုရန်ဖြစ်သည်။