Waxa ay Talo-So o Dhaliyaha ULID-ku Sameeyo
Boggan wuxuu u ogolaadaa isticmaalaha inuu soo doorto ULID (Universally Unique Lexicographically Sortable Identifier) qaab aqoonsiyeed ahaan, ka dibna uu sheego tirada aqoonsiyeyaasha uu u baahan yahay (laga bilaabo 1 ilaa 100). Marka la dhammaystiro, qalabku wuxuu si degdeg ah u soo saaraa liis aqoonsiyeyaal ah oo keli ah oo kala saari kara waqtiga. Aqoonsi kasta waa xarfo 26 ah oo aan kala soocin kiis sare iyo kiis hoose, waxaana la nuqul karaa mid mid ama dhammaan isla markiiba.
Qalabku wuxuu ku shaqeeyaa gudaha browser-kaaga oo dhammaan, isagoo adeegsanaya crypto.getRandomValues() si uu u helo random-ka xooggan. Ma jiro xog loo diraa server-ka; wax kasta oo lagu soo saaro waa maxalli. Tani waxay ka dhigan tahay in aqoonsiyeyaashaagu ay yihiin kuwa gaar ah oo sir ah, mana jiro qof kale oo heli kara.
Markaad beddesho ikhtiyaar kasta - ha ahaato qaabka (format), tirada, ama wax kale - liisku wuxuu dib u soo baxayaa. Qalabku wuxuu muujinayaa xaaladda: “Ready.” marka uu diyaar yahay, “Generated.” marka liisku soo baxo, iyo “Copied all!” marka aad dhammaan aqoonsiyeyaasha nuqusho. Aqoonsi gaar ah waxaad ku nuqul kartaa adigoo gujinaya.
Maxaa ka Duwan ULID-ka Qaababka kale?
ULID wuxuu ka duwan yahay qaababka kale sida UUID v4 iyo UUID v7 dhowr arrimood oo muhiim ah. Marka hore, dhererka ULID-ku waa 26 xaraf, halka UUID-ku yahay 36 xaraf (oo ay ku jiraan godad). Sidaa awgeed, ULID wuu ka gaaban yahay, wuuna fududdahay in la qoro oo la isticmaalo, gaar ahaan meelaha xaddidan sida URLs-ka.
Marka labaad, ULID wuxuu isticmaalaa Crockford's base32 alphabet - oo ah xarfaha 0-9 iyo A-Z, laakiin laga saaray I, L, O, iyo U si looga fogaado jahwareerka (tusaale, I iyo l way isku eeg yihiin). Tani waxay ka dhigaysaa ULID-ka mid aan kala soocin kiis sare iyo kiis hoose - waxaad qori kartaa “ABCD” ama “abcd”, labaduba waa isku mid. Sidoo kale, ma jiraan godad (hyphens) sida UUID-ka. Sidaa awgeed, ULID-ku waa mid ammaan u ah URLs-ka, umana baahna in la escape-garo (percent-encoding).
Marka saddexaad, ULID waa la kala saari karaa wakhtiga (lexicographically sortable). Tobanka xaraf ee ugu horreeya waxay ka kooban yihiin timestamp-ka millisecond-ka (48-bit), taas oo u ogolaanaysa in aqoonsiyeyaasha loo kala saaro sida ay u dhaceen. Tani waa faa'iido weyn marka la isticmaalo kaydka xogta ee B-tree, sababtoo ah aqoonsiyeyaasha soo socda ayaa ah kuwa si isdaba joog ah u kordhaya, taas oo yaraynaysa kharashka dib-u-habaynta tusaha.
Si ka soo horjeeda, UUID v4 waa gebi ahaan random, mana la kala saari karo wakhtiga. UUID v7 wuxuu isku dayayaa inuu soo rogo timestamp, laakiin wali wuu ka dheer yahay ULID-ka (36 xaraf) wuxuuna leeyahay godad. Qalabkan bogga, ULID-ka lama siin karo ikhtiyaarrada "uppercase" ama "hyphens" sababtoo ah qaabku wuxuu u dhisan yahay si iskood ah - ma jiraan kiis sare oo kala duwan ama godad.
Qaabka Gudbinta iyo Soo-Saarka
Soo-gelinta (Inputs)
- Qaabka (Format): Waa in la doortaa "ULID."
- Tirada (Count): Lambar dhan oo u dhexeeya 1 iyo 100. Qalabku ma aqbalo tiro ka baxsan xadkan.
Soo-saarka (Outputs)
- Liis aqoonsiyeyaal ah oo tiradoodu tahay inta la codsaday. Aqoonsi kasta waa xarfo 26 ah oo aan kala soocin kiis.
- Tiro muujinaysa inta aqoonsi ee la soo saaray.
- Xaalado: “Ready.”, “Generated.”, iyo “Copied all!” marka dhammaan la nuqulo.
- Ma jiraan ikhtiyaarada "uppercase" ama "hyphens" sababtoo ah ULID waa mid aan kala soocin kiis oo aan lahayn godad.
Xeerarka iyo Xaddidaadaha
- ULID waa xarfo 26 ah oo keli ah: Xarfo kuma jiraan godad ama calaamado kale.
- Tobanka xaraf ee hore waa timestamp-ka millisecond-ka: Kuwani waxay ka kooban yihiin 48-bit oo ah wakhtiga marka aqoonsiga la soo saaray (millisecond-ka ugu dhow). Lixdan xaraf ee dambe waa qaybta random-ka ah (80-bit).
- ULIDs waa la kala saari karaa wakhtiga: Laakiin ma dammaanad qaadayaan kala-saar sax ah haddii aqoonsiyo badan la soo saaro isla millisecond-kaas. Sababtoo ah qaybta random-ku waa random, laba aqoonsi oo isla wakhtiga soo baxa ayaa yeelan kara kala-saar aan joogto ahayn.
- Tirada aqoonsiyada: Waa inay tahay mid u dhaxaysa 1 iyo 100. Haddii aad isku daydid inaad gasho tiro ka badan ama ka yar, qalabku wuu diidaya.
- Beddelka ikhtiyaar kasta wuxuu dib u soo saaraa liiska: Haddii aad beddesho qaabka ama tirada, liiskii hore wuu tirtirmaa, liis cusub ayaa soo baxa.
- Nuqul gaar ah: Gujista aqoonsi gaar ah ayaa nuqul ka dhiga.
- Wax kasta oo maxalli ah: Ma jiro xog loo diraa server-ka. Khasnadda browser-ka ayaa laga helaa random-ka.
Yaa U Baahan Qalabkan?
- Horumariyeyaasha web-ka iyo mobilada oo u baahan aqoonsiyeyaal gaaban oo ammaan u ah URLs-ka, kuwaas oo la kala saari karo wakhtiga iyada oo aan loo baahnayn tiir wakhti oo gaar ah.
- Maamulayaasha kaydka xogta oo sameynaya furayaasha koowaad (primary keys) si loo hagaajiyo waxqabadka B-tree-ga, sababtoo ah aqoonsiyeyaasha ULID-ku waxay u dhawaanyihiin inay si isdaba joog ah u kordhaan, taas oo yaraynaysa kala qaybinta tusaha.
- Naqshadeeyayaasha nidaamyada qaybsan oo u baahan aqoonsiyeyaal gaar ah oo looga baahan yahay inay iskugu yimaadaan qaybaha kala duwan ee shabakada, laakiin weli waa inay noqdaan kuwa kala saari karo wakhtiga oo isku urursan.
- Naqshadeeyayaasha API-ga oo raba inay soo bandhigaan aqoonsiyeyaal dadweyne oo adag in la qiyaaso, laakiin waa kuwa dadka u fudud (ma jiro jahawareer kiis sare/hoose, ma jiro godad).
- Qof kasta oo u arka UUID-ka inuu aad u dheer yahay ama u adag yahay, oo raba beddel toosan oo yar, isagoo weli ilaalinaya 128-bit-ka, laakiin qaab gaaban.
Dhismaha Gudaha ee ULID-ka iyo Faa'iidooyinkeeda
Qaybta Wakhtiga (Timestamp) - 48-bit
ULID-ku wuxuu ka kooban yahay 128-bit oo guud ahaan. 48-bit-ka ugu horreeya waxay u taagan yihiin wakhtiga millisecond-ka laga soo bilaabo Unix epoch (Jan 1 1970). Marka la eego habka Crockford's base32, 48-bit waxay u dhigmaan 10 xaraf oo ah xarfaha koowaad ee ULID-ka. Tani waxay u ogolaanaysaa in aqoonsiyeyaasha loo kala saaro sida ay u dhaceen wakhtiga. Tusaale ahaan, haddii aad soo saartid ULID laba daqiiqo oo kala duwan, kan ugu da'da weyni wuxuu yeelan doonaa timestamp-ka ugu yar, marka wuxuu ku soo bixi doonaa kala-saar (alphabetical) ka hor kii dambe.
Waxaa muhiim ah in la ogaado in kala-saarani uu yahay mid ku salaysan timestamp-ka, ma aha mid sax ah haddii laba aqoonsi ay soo baxaan isla millisecond-ka. Sababtoo ah qaybta random-ku (80-bit) waa random, labada aqoonsi waxay yeelan karaan kala-saar aan la saadaalin karin. Tani waa farqiga u dhexeeya ULID-ka iyo nidaamyada sida UUID v7 oo isku dayaya inay ku daraan random-ka si loo ilaaliyo kala-saar isku millisecond-ka.
Qaybta Random-ka - 80-bit
80-bit-ka dambe waa qaybta random-ka ah. Marka la isticmaalo Crockford's base32, 80-bit waxay u dhigmaan 16 xaraf oo dheeri ah. Wadasocodka 48-bit + 80-bit = 128-bit, taas oo la mid ah UUID-ka (128-bit). Laakiin ULID-ku wuxuu isticmaalaa 80-bit oo keli ah oo random ah, halka UUID v4 uu isticmaalo 122-bit oo random ah (6-bit oo loo qoondeeyay qaabka). Sidaa awgeed, fursadda shilalka (collision) ayaa ah mid aad u yar, laakiin waxay kordhisaa marka la soo saaro aqoonsiyo badan isla wakhti yar gudahood. Tusaale ahaan, haddii aad soo saartid 1,000 ULID isla millisecond gudaheed, fursadda shilku waa ku dhawaad 1.2 × 10^(-18), taas oo ah mid aan waxba ahayn. Si kastaba ha ahaatee, nidaamyada wax soo saarka leh (high-throughput systems) waa inay tixgeliyaan fursaddan.
Kala-Saarka iyo B-tree-ga
Sida la soo sheegay, ULID-ku waa lexicographically sortable. Tani waxay ka dhigaysaa mid ku habboon in loo isticmaalo furayaasha koowaad ee kaydka xogta sida PostgreSQL, MySQL, iyo MongoDB. Marka aqoonsiyeyaasha cusubi ay yihiin kuwa si isdaba joog ah u kordhaya, B-tree-ga ayaa ku darayaa cusub dhamaadka midig, taas oo yaraynaysa baahida loo qabo dib-u-habayn. Taas bedelkeeda, UUID v4 oo random ah ayaa sababay kala qaybin (splitting) oo badan, taas oo hoos u dhigaysa waxqabadka.
Ammaanka URL-ka
Xarfaha Crockford's base32 (0-9, A-Z laga reebo I, L, O, U) dhammaantood waa kuwa aan qasnayn (unreserved) marka loo eego RFC 3986. Tani waxay ka dhigan tahay in ULID-ka loo isticmaali karo URLs-ka iyada oo aan loo baahnayn in la escape-garo (percent-encoding). Tusaale ahaan, ULID-ka "01ARZ3NDEKTSV4RRFFQ69G5FAV" waa mid ammaan u ah URL-ka, halka UUID-ka sida "550e8400-e29b-41d4-a716-446655440000" ay u baahan tahay in la escape-garo godadka (hyphens) haddii loo isticmaalo qaybta path-ka. Tani waxay fududaynaysaa horumarinta API-yada iyo nidaamyada kale ee URLs-ka isticmaala.
Qarsoodiga iyo Dhalidda Maxalliga ah
Qalabkan wuxuu aqoonsiyeyaasha ku soo saaraa gudaha browser-ka adoo adeegsanaya crypto.getRandomValues(). Tani waa isha ugu xooggan ee random-ka ee browser-ka (cryptographically secure). Ma jiro xog loo diraa server-ka, marka sirtaadu waa mid buuxda. Tani way ka duwan tahay adeegyada kale oo aqoonsiyeyaasha ku soo saara server-ka, halkaas oo ay jiraan khataraha sir-gelin ama xog ururin.
Isbarbardhigga NanoID-ka iyo UUID-ka
NanoID waa qaab kale oo gaaban, laakiin dhererkiisu waa doorsoome (variable length). Tusaale ahaan, NanoID-ka caadiga ah waa 21 xaraf, laakiin ma laha timestamp-ka sida ULID-ka. Sidaa awgeed, NanoID-ka lama kala saari karo wakhtiga. UUID-ka (36 xaraf) waa mid aad u dheer, waxaana ku jira godad. ULID-ka (26 xaraf) waa meel dhexaad: gaaban, la kala saari karo, oo ammaan u ah URL-ka. Isticmaalaha ayaa doortaa inta uu u baahan yahay, laakiin ULID-ku wuxuu bixiyaa dheelitirka ugu fiican ee dhismaha nidaamyada casriga ah.
FAQ
1. Maxaa dhacaya haddii aan soo saaro laba ULID isla millisecond-ka? Ma kala saari karaa?
Maya, ULID-ku kuma dammaanad qaado kala-saar isku millisecond-ka. Timestamp-ka 48-bit wuxuu u dhigmaa millisecond keli ah. Marka loo kala saaro lexicographically ahaan, aqoonsiyeyaasha isla wakhtiga ayaa yeelan doona qaybta timestamp-ka oo isku mid ah, marka kala-saarku wuxuu kuxiran yahay qaybta random-ka (80-bit). Tani waa random, marka kala-saarku ma noqon doono mid la saadaalin karo. Hababka sida UUID v7 waxay isku dayaan inay ku daraan tiro-gaar (counter) si loo xalliyo arrintan, laakiin ULID-ku waa ka fudud yahay.
2. Waa maxay fursadda shilalka (collision) ee ULID-ka?
80-bit oo random ah waxay ka dhigan tahay in jirto 2^80 oo aqoonsi oo suurtagal ah. Shilalka ayaa dhacaya marka laba aqoonsi ay yeelaan isla 80-bit-ka random-ka iyo isla timestamp-ka. Tani waa mid aad u yar. Tusaale ahaan, haddii aad soo saartid 1,000 ULID isla millisecond gudaheed, fursadda shilku waa 1.2 × 10^(-18). Si kastaba ha ahaatee, haddii aad ka soo saartid 1 bilyan oo ULID isla wakhti yar gudahiisa (sida system-ka weyn), fursaddu waxay kordheysaa, laakiin wali waa mid aan macquul ahayn.
3. Miyaan isticmaali karaa ULID-ka kaydka xogta anoo ah furayaasha koowaad (primary keys)?
Haa, waa talo fiican. Sababtoo ah ULID-yadu waa la kala saari karaa wakhtiga, B-tree-ga ayaa si fiican u qaadan doona aqoonsiyeyaasha cusub, sababtoo ah waxay u dhawaanyihiin inay yihiin kuwa si isdaba joog ah u kordhaya. Tani waxay yaraynaysaa kala qaybinta tusaha (index fragmentation) oo kor u qaadeysaa waxqabadka. Laakiin waa inaad ogaataa in ULID-yadu ay ka dheer yihiin integers-ka (4 byte ama 8 byte), marka waxay qaadanayaan boos badan. Si kastaba ha ahaatee, inta badan, faa'iidada kala-saarku waa ka weyn tahay kharashka booska.
4. Ma jiraa qaabka "uppercase" ama "lowercase" ee ULID-ka?
Maya, ULID-ku waa mid aan kala soocin kiis sare iyo kiis hoose. Crockford's base32 alphabet wuxuu u dhigaa kiis sare iyo hoose si isku mid ah. Tusaale ahaan, "ABCD" iyo "abcd" labaduba waa isku ULID. Qalabkan bogga, aqoonsiyeyaasha waxaa la soo saaraa iyadoo la isticmaalayo kiis sare (A-Z), laakiin haddii aad ku nuqusho kiis hoose, wali waa la aqoonsan doonaa. Tanina waxay fududaynaysaa isticmaalka nidaamyada kala duwan.
5. Sideen u nuqul karaa dhammaan ULID-yada hal mar?
Qalabka ayaa leh badhanka "Copy all" ka dib marka la soo saaro liiska. Markaad gujiso, dhammaan aqoonsiyeyaasha ayaa la nuqul doonaa sida liis ah (mid kasta oo saf gaar ah). Kadibna waxaad arki doontaa "Copied all!" si loo xaqiijiyo. Haddii aad dooneyso inaad nuqusho mid keliya, guji aqoonsiga laftiisa.
6. Maxaa dhacaya haddii aan doonayo inaan soo saaro wax ka badan 100 ULID?
Qalabkan wuxuu xaddidayaa tirada ugu badan ee la soo saari karo inay tahay 100. Haddii aad u baahan tahay in ka badan, waa inaad samaysaa wax soo saar dhowr jeer (tusaale, 100 jeer 2 = 200). Qalabku wuxuu u sii daayaa isticmaalaha inuu sameeyo dhowr jeer iyada oo aan la kordhin kharash.
Ugu Dambeyn
Qalabka dhaliyaha ULID-ka ee boggan waa qalab fudud oo waxtar leh oo lagu soo saaro aqoonsiyeyaal gaagaaban oo la kala saari karo wakhtiga. Wuxuu ku shaqeeyaa gudaha browser-ka, ma jiro xog loo diraa meel kale, wuxuuna siinayaa isticmaalaha xakamayn buuxda. Haddii aad tahay horumariye web, maamule kaydka xogta, ama naqshadeeye nidaam qaybsan, ULID-ku waa doorasho fiican oo ku xallisa dhibaatooyinka dhererka iyo kala-saarka. Isticmaal oo aad u fiirso fasta iyo kalsoonaanta ay bixiso.