ULID генераторы

Интернетте ULID жасаңыз: 48 биттік уақыт және 80 кездейсоқ биттен тұратын 26 таңбалы Crockford Base32 идентификаторлары.

Формат
Жасалған ID-лер
Дайын. Браузеріңізде ULID мәндерін жасаңыз.

Бұл ID қалай жасалған

Құрылымы
26 Crockford Base32 таңбасы: 10 уақыт таңбасы, одан кейін 16 кездейсоқ таңба.
Энтропия
48 биттік миллисекундтық уақыт белгісінен кейін 80 кездейсоқ бит.
Уақыт
Иә. Алғашқы 10 таңба миллисекундтық уақытты кодтайды және лексикалық реттілік уақыт бойынша жүреді.
Коллизия қаупі
Кездейсоқ соңында 80 бит бар; қауіп негізінен бір миллисекундта қанша ID жасайтыныңызға байланысты.
Мысал
01M12BRQ0QC2K533WF79N6CRE5

ID-леріңіз сенімді браузерлік кездейсоқтық арқылы жергілікті түрде жасалады. BroBroGo серверіне ештеңе жіберілмейді.

Жиі қойылатын сұрақтар (FAQ)

ULID не үшін тиімді?

ULID ықшам, URL-үйлесімді және қарапайым мәтін ретінде уақыт бойынша сұрыпталады, бұл журналдар, объект кілттері және жасалу уақыты бойынша сұрыпталуы керек жазбалар үшін пайдалы.

ULID пен UUID v7 бірдей ме?

Жоқ. Екеуі де миллисекундтық уақытты қамтиды, бірақ ULID Crockford Base32 және 26 таңбаны пайдаланады, ал UUID v7 стандартты UUID он алтылық пішінін сақтайды.

ULID генераторы бетінің сипаттамасы

Бұл бет «ULID» идентификатор форматын таңдауға, қажетті идентификатор санын (1 мен 100 аралығында) енгізуге және бірден уақыт бойынша сұрыпталатын бірегей ULID жолдарының тізімін алуға мүмкіндік береді. Әрбір ULID 26 таңбадан тұратын, регистрге тәуелсіз жол ретінде көрсетіледі. Қолданушы жеке идентификаторларды немесе бүкіл тізімді бірден көшіре алады. Құралдың негізгі мақсаты – UUID сияқты ұзын форматтарға қарағанда қысқа әрі ыңғайлы, сонымен қатар уақыт мөрімен сұрыпталатын идентификаторларды жылдам генерациялау.

Беттегі басқа форматтардан айырмашылығы, ULID тек 26 таңбаны пайдаланады (UUID-де 36 таңба бар), тек Crockford base32 әліпбиін қолданады – бұл идентификаторларды регистрге тәуелсіз етеді және дефистері жоқ. Мұнда регистрді өзгерту немесе дефис қосу секілді қосымша қосқыштар жоқ, өйткені ULID форматы өздігінен регистрге тәуелсіз және дефистерді қамтымайды. Алғашқы 10 таңба миллисекунд дәлдігіндегі уақыт мөрін кодтайды, ал қалған 16 таңба кездейсоқ компоненттен (80 бит) тұрады. Барлығы 128 бит ақпарат.

ULID форматының ерекшеліктері

ULID – бұл 26 таңбалы жол, оның бірінші 10 таңбасы уақыт мөріне (миллисекунд дәлдігімен) сәйкес келеді. Уақыт мөрі 48 битті қамтиды, ал қалған 80 бит кездейсоқ сандардан тұрады. Crockford base32 кодтауы тек 0–9 цифрлары мен A–Z әріптерін (I, L, O, U әріптері алынып тасталған) пайдаланады. Бұл әліпби визуалды түрде шатасуға бейім таңбаларды жояды (мысалы, «I» мен «l» немесе «O» мен «0»). Нәтижесінде ULID адам үшін оқуға жеңіл, көшіру кезінде қателік ықтималдығы төмен.

Тағы бір маңызды ерекшелік – ULID лексикографиялық ретпен сұрыпталады. Яғни, бірінші жасалған идентификатор әліпби бойынша екіншіден бұрын келеді. Бұл дерекқорда B-ағаш индекстерінің жұмысын жақсартады, себебі жаңа жазбалар шамамен монотонды түрде өседі. Алайда бір миллисекунд ішінде жасалған ULID-тердің қатаң реті кепілдендірілмейді. Егер бір уақытта бірнеше идентификатор тудырылса, олардың кездейсоқ бөлігінің кішілігіне қарай сұрыпталуы мүмкін.

ULID веб-мекенжайларында қауіпсіз – ешқандай арнайы таңбалар (мысалы, «+», «/» немесе «=») жоқ, сондықтан URL-ді пайызбен кодтаудың қажеті жоқ. Бұл оны API және веб-қосымшалар үшін өте ыңғайлы етеді.

Кіріс және шығыс параметрлері

Кірістер:

  • Формат таңдауы міндетті түрде «ULID» болып орнатылған.
  • Саны: 1-ден 100-ге дейінгі бүтін сан. Қолданушы қанша идентификатор қажет екенін көрсетеді.

Шығыстар:

  • Сұралған сандағы ULID жолдарының тізімі.
  • Жасалған идентификаторлар саны туралы хабарлама (мысалы, «5 идентификатор жасалды»).
  • Күй хабарламалары: «Дайын» (Ready), «Жасалды» (Generated) және бүкіл тізім көшірілгенде «Барлығы көшірілді!» (Copied all!).
  • Бұл бетте регистрді өзгерту немесе дефис қосу секілді қосымша қосқыштар жоқ, себебі ULID форматы оларды қажет етпейді.

Ескерту: Кез келген опцияны өзгерту (формат, сан немесе басқа параметрлер) идентификаторлар тізімін автоматты түрде қайта генерациялайды.

Ережелер мен шектеулер

  • ULID 26 таңбадан тұратын жол. Алғашқы 10 таңба – уақыт мөрі, қалған 16 – кездейсоқ бөлік.
  • Уақыт мөрі миллисекунд дәлдігіндегі 48 биттік мән. Бұл ULID-терді жасалу уақыты бойынша сұрыптауға мүмкіндік береді.
  • Бір миллисекунд ішінде жасалған идентификаторлардың реті кездейсоқ компонентке байланысты, сондықтан қатаң рет кепілдік берілмейді.
  • Құрал 1-ден 100-ге дейінгі идентификаторды ғана қабылдайды. Осы диапазоннан тыс сандар енгізілмейді.
  • Идентификаторлардың барлығы браузерде жергілікті түрде жасалады. Қауіпсіз кездейсоқ сандарды алу үшін crypto.getRandomValues() функциясы қолданылады. Ешқандай мәлімет серверге жіберілмейді.
  • Әрбір ULID-ді жеке басу арқылы оны буферге көшіруге болады. Сондай-ақ «Көшіру» түймесі арқылы бүкіл тізімді көшіруге болады.
  • Дефис немесе регистрді өзгерту опциялары жоқ, өйткені ULID форматы оларды қамтымайды.

Кімге қажет

  • Веб және мобильді әзірлеушілер: Оларға URL-қауіпсіз, қысқа әрі уақыт бойынша сұрыпталатын идентификаторлар қажет. ULID бөлек уақыт бағанасын қажет етпейді.
  • Дерекқор әкімшілері: B-ағаш индекстерінің өнімділігін жақсарту үшін бастапқы кілттер ретінде ULID қолдану – жаңа идентификаторлар әдетте монотонды түрде өседі, бұл бет бөлінуін азайтады.
  • Таратылған жүйелер архитекторлары: Бірнеше түйіндерде бірегей және сұрыпталатын идентификаторлар қажет болғанда, ULID жинақы әрі өнімді нұсқа болып табылады.
  • API дизайнерлері: Қоғамдық идентификаторлар үшін ULID қолдану – оларды болжау қиын, бірақ адам оқи алады (регистр шатасуы жоқ, дефис анықтамасы жоқ).
  • Кез келген адам, UUID тым ұзын немесе ыңғайсыз деп санайтын және 128 биттік кеңістікті сақтай отырып, қысқа балама іздейтіндер.

ULID ішкі құрылымы және салыстыру

ULID 128 битті қамтиды: 48 бит уақыт мөрі (миллисекунд дәлдігі) және 80 бит кездейсоқ компонент. Crockford base32 кодтауы бір таңбада 5 бит ақпарат сақтайды, сондықтан 128 бит үшін 26 таңба қажет (128/5 = 25.6, дөңгелектенген). UUID v4 (кездейсоқ) 122 бит кездейсоқтықты қамтиды және 36 таңбадан тұрады (дефистермен). UUID v7 уақыт мөрін қамтиды, бірақ 128 бит үшін әлі де 36 таңба қажет. ULID бұдан 10 таңбаға қысқа, бұл дерекқорда немесе логикалық журналдарда үнемдеуге әкеледі.

Салыстыру кестесі:

Сипаттама UUID v4 UUID v7 ULID
Длина, символдар 36 36 26
Уақыт мөрі жоқ иә (миллисекунд) иә (миллисекунд)
Сұрыпталуы кездейсоқ уақыт бойынша уақыт бойынша
Дефистер иә (4) иә (4) жоқ
Регистрге тәуелді иә иә жоқ
URL-қауіпсіздік ішінара ішінара толық

ULID-тің тағы бір артықшылығы – коллизия ықтималдығы. 80 биттік кездейсоқ компонент 2^80 мүмкін мәнді береді. Бұл өте аз. Мысалы, секундына 1 миллиард ULID генерациялағанда, коллизия пайда болу үшін әрбір жүздеген жылда бір рет қана күтіледі. Алайда нақты қолданбаларда үлкен жүйелерде бірнеше машиналар бір уақытта генерациялайтын болса, коллизия ықтималдығы артады, бірақ тәжірибеде бұл сирек кездеседі.

Жергілікті генерация және қауіпсіздік

Барлық ULID идентификаторлары пайдаланушының браузерінде жасалады. Бұл деректердің ешқайда жіберілмейтінін білдіреді – серверге ешқандай ақпарат жіберілмейді, журналдарда сақталмайды. Қауіпсіз кездейсоқ сандарды алу үшін crypto.getRandomValues() пайдаланылады, бұл заманауи браузерлерде криптографиялық тұрғыдан күшті кездейсоқтықты қамтамасыз етеді. Сондықтан бұл құрал жеке деректерді өңдеу кезінде де қауіпсіз.

Серверлік генерациялау қызметтерімен салыстырғанда, бұл бет жергілікті және желіге тәуелді емес. Пайдаланушы интернетсіз де (бет бір рет жүктелгеннен кейін) идентификаторларды генерациялай алады. Бұл құпиялылықты сақтау үшін маңызды, әсіресе жоба прототипі немесе жеке деректермен жұмыс істеу кезінде.

FAQ (жиі қойылатын сұрақтар)

Сұрақ: ULID неліктен 26 таңбадан тұрады?
Жауап: ULID 128 биттік мәнді Crockford base32 кодтауымен көрсетеді. Әр таңба 5 бит сақтайды, сондықтан 128/5 = 25.6, дөңгелектенгенде 26 таңба.

Сұрақ: ULID регистрге тәуелсіз бе?
Жауап: Иә, Crockford base32 әліпбиі әріптердің регистрін елемейді. «ABCD» және «abcd» бірдей ULID болып есептеледі. Алайда көбінесе жоғарғы регистрде жазылады.

Сұрақ: ULID-ті UUID-дің орнына қолдануға бола ма?
Жауап: Көп жағдайда иә. Егер сізге уақыт бойынша сұрыпталатын, қысқа және URL-қауіпсіз идентификаторлар қажет болса, ULID тамаша таңдау. Бірақ егер жүйе тек UUID v4 күтетін стандарттарды қолданса, үйлесімділік мәселелері туындауы мүмкін.

Сұрақ: Бір миллисекундта бірнеше ULID жасау қауіпті ме?
Жауап: Жоқ, қауіпті емес. Уақыт мөрі бірдей болғандықтан, кездейсоқ компонент коллизияны болдырмайды. Алайда рет сұрыпталуы кездейсоқ болады. Егер қатаң рет қажет болса, синхрондау қажет.

Сұрақ: Құрал қанша ULID генерациялайды?
Жауап: 1-ден 100-ге дейін. Бұл диапазоннан тыс сандар қабылданбайды. Егер сізге одан да көп қажет болса, бірнеше рет генерациялауға болады.

Сұрақ: Кездейсоқ компоненттің сапасы қандай?
Жауап: crypto.getRandomValues() криптографиялық тұрғыдан күшті кездейсоқ сандарды береді. Бұл кәдімгі Math.random()-нан әлдеқайда сенімді.

Сұрақ: ULID-ті дерекқорда бастапқы кілт ретінде қолдансам, индекстеу қалай жұмыс істейді?
Жауап: Уақыт мөріне байланысты ULID шамамен монотонды түрде өседі, бұл B-ағаш индекстерінің өнімділігін жақсартады. Алайда бірдей уақыттағы идентификаторлар кездейсоқ ретпен қосылады, бірақ бұл әдетте үлкен проблема емес.