ULID Գեներատոր

Ստեղծեք ULID-ներ առցանց. 26-նիշանոց Crockford Base32 ID-ներ՝ 48-բիթանոց ժամանակով և 80 պատահական բիթերով:

Ձևաչափ
Գեներացված ID-ներ
Պատրաստ է: Ստեղծեք ULID-ներ Ձեր բրաուզերում:

Ինչպես է կառուցված այս ID-ն

Կառուցվածք
26 Crockford Base32 նիշեր. 10 ժամանակային նիշ, որոնց հաջորդում են 16 պատահական նիշեր:
Էնտրոպիա
80 պատահական բիթ՝ 48-բիթանոց միլիվայրկյանային ժամանակային դրոշմից հետո:
Ժամանակ
Այո: Առաջին 10 նիշերը կոդավորում են միլիվայրկյանային ժամանակը, իսկ բառարանային կարգը հետևում է ժամանակին:
Բախման ռիսկ
Պատահական վերջավորությունն ունի 80 բիթ. ռիսկը հիմնականում կապված է այն բանի հետ, թե քանի ID եք ստեղծում միևնույն միլիվայրկյանում:
Օրինակ
01M12BRPVVJNKGBT24Y90W0BDD

Ձեր ID-ները գեներացվում են տեղում՝ բրաուզերի հուսալի պատահականության միջոցով: BroBroGo-ին ոչինչ չի ուղարկվում:

Հաճախ տրվող հարցեր

Ինչի՞ համար է օգտակար ULID-ը:

ULID-ը կոմպակտ է, հարմար է URL-ների համար և տեսակավորվում է ըստ ժամանակի որպես սովորական տեքստ, ինչը օգտակար է լոգերի, օբյեկտների բանալիների և գրառումների համար, որոնք պետք է տեսակավորվեն ըստ ստեղծման ժամանակի:

Արդյո՞ք ULID-ը նույնն է, ինչ UUID v7-ը:

Ոչ: Երկուսն էլ ներառում են միլիվայրկյանային ժամանակը, սակայն ULID-ն օգտագործում է Crockford Base32 և 26 նիշ, մինչդեռ UUID v7-ը պահպանում է ստանդարտ UUID տասնվեցական տեսքը:

ULID գեներատոր էջ. Ինչպես է աշխատում և ինչու է օգտակար

Ինչ է ULID-ը և ինչ է տալիս այս էջը

Էջում ընտրում եք ULID ձևաչափը, նշում պահանջվող նույնականացուցիչների քանակը (1–100 միջակայքում), և գործիքն ակնթարթորեն ստեղծում է եզակի, ժամանակով դասավորվող ULID-ների ցանկ։ Յուրաքանչյուր նույնականացուցիչ 26 նիշանոց տող է, որը գրված է Crockford-ի base32 այբուբենով, առանց գծիկների, և պատրաստ է պատճենվելու առանձին կամ միանգամից։ Ստեղծված ID-ների քանակը ցուցադրվում է, և էջը վերահսկում է կարգավիճակի հաղորդագրությունները՝ «Ready.», «Generated.», «Copied all!» ամբողջ ցանկի պատճենումից հետո։ ULID-ի դեպքում այլ անջատիչներ (մեծատառ, գծիկ) չեն ցուցադրվում, քանի որ ձևաչափն ինքնին զուրկ է այդ տարրերից և արդեն իսկ case‑insensitive է:

Այս էջը տարբերվում է նույն գործիքի մյուս ձևաչափերից նրանով, որ ULID-ն արտադրում է ավելի կարճ նույնականացուցիչներ (26 նիշ ընդդեմ UUID-ի 36-ի), օգտագործում է միայն Crockford-ի base32 այբուբենը (նիշեր՝ 0‑9, A‑Z՝ առանց I, L, O, U տառերի), ինչը դարձնում է դրանք ռեգիստրաանկախ և զուրկ գծիկներից։ ULID-ները լեքսիկոգրաֆիկորեն դասավորվում են ստեղծման ժամանակի հիման վրա, քանի որ առաջին 10 նիշերը կոդավորում են միլիվայրկյան ճշգրտությամբ ժամանակի դրոշմը։ Դրանք նաև URL‑անվտանգ են և չեն պահանջում փախուստի (escaping) օգտագործում։ Պատահական բաղադրիչը զբաղեցնում է մնացած 16 նիշը (80 բիթ), իսկ ընդհանուր հիմքում ընկած արժեքը 128 բիթ է:

ULID-ի ներքին կառուցվածքը

ULID-ը 128‑բիթանոց նույնականացուցիչ է, որը բաժանվում է երկու մասի․

  • 48 բիթ (առաջին 10 նիշ) – միլիվայրկյան ճշգրտությամբ UNIX‑ժամանակի դրոշմ: Սա թույլ է տալիս նույնականացուցիչները տեսակավորել ըստ ստեղծման պահի, քանի որ տողի սկիզբն աճում է ժամանակի հետ մեկտեղ:
  • 80 բիթ (հաջորդ 16 նիշ) – կրիպտոգրաֆիկորեն հուսալի պատահականություն, որն ապահովում է եզակիություն նույն միլիվայրկյանում ստեղծված մի քանի ID-ների միջև:

Այս 128 բիթերը կոդավորվում են Crockford-ի base32 այբուբենով, որը տալիս է 26 նիշ: Base32 այբուբենն օգտագործում է 10 թվանշան (0‑9) և 22 տառ (բացառելով I, L, O, U), ինչի շնորհիվ վերանում է տեսողական շփոթությունը (օրինակ՝ 1/I, 0/O): Քանի որ բոլոր նիշերը մեծատառ և փոքրատառ տարբերակներում մեկնաբանվում են նույն կերպ, ULID-ը լիովին case‑insensitive է: Սա հարմար է մարդկային ընթերցման և ձեռքով արտագրելու համար, քանի չկա «մեծատառ/փոքրատառ» սխալի վտանգ:

Հենց այս ձևավորման շնորհիվ ULID-ը կարող է միաժամանակ ծառայել որպես ժամանակային մարկեր և եզակի պատահական նույնականացուցիչ:

Համեմատություն UUID v4-ի, UUID v7-ի և այլ ձևաչափերի հետ

Շատ կիրառություններում ULID-ը դիտարկվում է որպես UUID-ի այլընտրանք: Հիմնական տարբերությունները․

Հատկություն ULID UUID v4 UUID v7
Երկարություն 26 նիշ 36 նիշ (4 գծիկով) 36 նիշ (4 գծիկով)
Նիշերի այբուբեն Crockford base32 (10+22) hex (0‑9, a‑f) hex (0‑9, a‑f)
Գծիկներ չկա 4 հատ 4 հատ
Ռեգիստրաանկախություն այո ոչ (եթե տառեր կան) ոչ
Ժամանակի վրա հիմնված տեսակավորում այո (լեքսիկոգրաֆիկ) ոչ այո (ժամանակի դաշտով)
URL‑անվտանգություն այո (ոչ մի հատուկ նիշ) պահանջում է գծիկների փախուստ միայն որոշ դեպքերում նույնը
Պատահական բիթերի քանակը 80 122 74 (ժամանակ + հաջորդականություն)

UUID v4-ը հիմնված է բացառապես պատահականության վրա, ուստի այն չի տեսակավորվում ըստ ժամանակի: UUID v7-ն արդեն պարունակում է ժամանակի դրոշմ, սակայն դրա տողային ներկայացումը hex-ով ավելի երկար է և պարունակում է գծիկներ: ULID-ը հաղթում է կարճությամբ, մարդկային ընթերցման հարմարավետությամբ (գծիկներ չկան, բոլոր նիշերը հստակ տարբերվում են) և URL- անվտանգությամբ: NanoID տարբերակը կարող է լինել ավելի կարճ (21 նիշ), բայց այն չի պարունակում ժամանակային տեղեկություն և ունի հարմարեցվող այբուբեն, ինչը կարող է հանգեցնել շփոթության տարբեր կարգավորումներում:

Ստեղծման վարք, տեսակավորում և հավանական խնդիրներ

ULID-ի գլխավոր առավելություններից մեկը լեքսիկոգրաֆիկ տեսակավորումն է ըստ ստեղծման ժամանակի: Սա նշանակում է, որ ավելի ուշ ստեղծված ID-ն միշտ ավելի մեծ է (տողային համեմատությամբ), քան ավելի վաղ ստեղծվածը: Այնուամենայնիվ, չկա խիստ երաշխիք նույն միլիվայրկյանում ստեղծված ID-ների միջև: Եթե մեկ միլիվայրկյանում առաջացնեք մի քանի ULID, ապա դրանց ժամանակային դրոշմը նույնը կլինի, իսկ կարգը կախված կլինի պատահական 80 բիթերից: Այսինքն՝ «նույն միլիվայրկյանում» ULID-ները միմյանց նկատմամբ չեն դասավորվի: Դա կարևոր է, երբ անհրաժեշտ է միկրո մակարդակի կարգուկանոն:

Հավանական խնդիրները ներառում են․

  • Կրկնության հավանականություն: 80‑բիթանոց պատահական մասը ապահովում է 2^80 ≈ 1.2 × 10^24 հնարավոր արժեք: Կրկնության հավանականությունը մեծանում է, երբ շատ ID-ներ են ստեղծվում կարճ ժամանակում: Գործնականում, այսքան մեծ տարածությունը չափազանց դժվարացնում է պատահական կրկնությունը մինչև միլիարդավոր ID-ներ ստեղծելուց:
  • Նույն միլիվայրկյանում ստեղծված ID-ներում կարգի բացակայություն: Սա կարող է խնդիր լինել ժամանակի վրա հիմնված տվյալների բազաներում, երբ անհրաժեշտ է տարբերել միկրովայրկյաններ: Այդ դեպքում ավելի հարմար է ULID-ի ձևափոխությունները, որոնք ավելացնում են հաջորդական համար, բայց ստանդարտ ULID-ը դա չի ապահովում:
  • Ժամացույցի հետընթաց: Եթե համակարգի ժամացույցը հետ է գնում, ապա նոր ULID-ների ժամանակային դրոշմը կլինի ավելի փոքր, ինչը խախտում է տեսակավորման կարգը: Այս խնդիրը բնորոշ է ցանկացած ժամանակի վրա հիմնված ID-ի:

Ում է պետք ULID գեներատորը

Այս էջն օգտակար է տարբեր մասնագետների համար․

  • Վեբ և բջջային հավելվածների մշակողներ, ովքեր կարիք ունեն կարճ, URL‑անվտանգ նույնականացուցիչների, որոնք կարելի է տեսակավորել ըստ ստեղծման ժամանակի առանց առանձին ժամանակային սյունակի:
  • Տվյալների բազայի ադմինիստրատորներ, ովքեր նախագծում են հիմնական բանալիներ, որոնք բարելավում են B‑ծառի ներդրման կատարումը, քանի որ նոր ID-ները մոտավորապես միապաղաղ աճում են:
  • Բաշխված համակարգերի ճարտարապետներ, ովքեր պահանջում են եզակի ID-ներ բազմաթիվ հանգույցներում, որոնք կարելի է տեսակավորել, բայց միևնույն ժամանակ կոմպակտ են:
  • API մշակողներ, ովքեր ցանկանում են բացահայտել հանրությանը հասանելի ID-ներ, որոնք դժվար է կռահել, բայց հարմար են մարդկանց համար (միատեսակ տառեր/թվեր, գծիկների բացակայություն):
  • Բոլոր նրանք, ովքեր UUID-ը համարում են չափազանց երկար և անշնորհք, և ցանկանում են 128‑բիթանոց նույնականացուցիչի ավելի կարճ ներկայացում:

ULID-ը հատկապես արժեքավոր է տվյալների բազաներում, որտեղ նոր տողերը տեղադրվում են B‑ծառի աջ մասում՝ նվազեցնելով էջի բաժանման հաճախությունը՝ համեմատած ամբողջովին պատահական UUID v4-ի հետ:

Լոկալ գեներացիա և գաղտնիություն

Այս գործիքի բոլոր ULID-ները ստեղծվում են բացառապես բրաուզերում՝ օգտագործելով ամուր կրիպտոգրաֆիկ պատահականություն (crypto.getRandomValues())։ Սա նշանակում է, որ ոչ մի տեղեկություն չի ուղարկվում սերվեր, և ID-ները չեն պահվում կամ տեղափոխվում ցանցով: Էջը կարող է աշխատել անցանց ռեժիմում (եթե արդեն բեռնված է), և բոլոր հաշվարկները կատարվում են տեղում: Սա ապահովում է բարձր մակարդակի գաղտնիություն, հատկապես եթե ID-ներն օգտագործվում են զգայուն տվյալների համար:

Նշենք, որ crypto.getRandomValues()-ը բրաուզերի անվտանգ պատահականության API է, որը սովորաբար ավելի կանխատեսելի չէ, քան սերվերի լուծումները, բայց ապահով է գործնական բոլոր կիրառությունների համար: Չկա կախվածություն արտաքին ծառայություններից, ուստի մշտական ինտերնետ կապ չի պահանջվում:

Հաճախ տրվող հարցեր

1. ULID-ը կարո՞ղ է կրկնվել
Հավանականությունը չափազանց փոքր է 80‑բիթանոց պատահական մասի շնորհիվ: Գործնականում, միլիարդավոր ULID-ներ ստեղծելուց հետո կրկնության հավանականությունը դեռ մնում է աննշան: Սակայն նույն միլիվայրկյանում ստեղծված մի քանի ID-ների միջև կրկնությունն անհնար է, քանի որ պատահական մասը եզակի է:

2. Ինչո՞ւ ULID-ը գծիկներ չունի
ULID-ի ձևավորումը միտումնավոր բացառում է գծիկները, որոնք կան UUID-ում: Սա կրճատում է երկարությունը (26 նիշ ընդդեմ 36-ի) և հեշտացնում է ընթերցումը, մուտքագրումը, ինչպես նաև URL-ներում օգտագործումը (գծիկներն URL-ում հատուկ նիշեր չեն, բայց դրանք ավելացնում են շփոթություն): Base32 այբուբենն ապահովում է, որ տողը մնա միատարր:

3. Կարո՞ղ եմ ULID-ը օգտագործել տվյալների բազայի հիմնական բանալի
Այո, շատ մշակողներ նախընտրում են ULID-ը UUID v4-ի փոխարեն, քանի որ ժամանակի վրա հիմնված դասավորությունը նվազեցնում է էջի բաժանումը B‑ծառի ինդեքսներում: Այնուամենայնիվ, հիշեք, որ ULID-ը 128‑բիթանոց է, այնպես որ տվյալների բազայի սյունակը պետք է աջակցի նման մեծ տվյալների տեսակ (CHAR(26) կամ BINARY(16)):

4. Ինչպե՞ս է աշխատում տեսակավորումը, եթե մի քանի ID ստեղծվեն միաժամանակ
Նույն միլիվայրկյանում ստեղծված ULID-ներն ունեն նույն ժամանակային դրոշմը (առաջին 10 նիշը նույնն է), ուստի դրանց տեսակավորումը կախված է միայն պատահական 80 բիթերից և չի արտացոլում ստեղծման հերթականությունը: Այդ պատճառով, եթե անհրաժեշտ է միկրո վայրկյանի ճշգրտություն, ապա ULID-ը բավարար չէ:

5. Որո՞նք են ULID-ի սահմանափակումները

  • Ժամանակային դրոշմը սահմանափակված է մինչև մոտ 10800 տարի (48 բիթ UNIX ժամանակ):
  • Ստանդարտ ULID-ը չի ապահովում հաջորդականության աճ նույն միլիվայրկյանում:
  • Եթե համակարգի ժամացույցը վերադառնա, ապա նոր ID-ները կարող են դառնալ «ավելի փոքր», ինչը խախտում է ինդեքսի ներդրման ակնկալիքները:
  • 26 նիշանոց տողը կարող է ավելի երկար լինել, քան NanoID-ի կարճ տարբերակները:

6. ULID-ը URL‑անվտա՞նգ է
Այո: Crockford-ի base32 այբուբենի բոլոր նիշերը (0‑9, A‑Z առանց I, L, O, U) ներառված են RFC 3986-ի «անպաշտպան» (unreserved) նիշերի ցանկում, ուստի ULID-ները չեն պահանջում percent‑encoding URL-ներում օգտագործելիս: