UUID v4 ұрпағы: бұл бет не істейді?
Бұл бетте сіз UUID v4 идентификаторларын жасайсыз — 8-4-4-4-12 пішіміндегі 36 таңбалы кездейсоқ жолдар. Сіз идентификаторлардың санын (1-ден 100-ге дейін) және олардың бас әріптермен немесе дефиссіз көрсетілгенін басқарасыз. Идентификаторлар браузеріңіздегі күшті кездейсоқтықты пайдаланып, бірден жасалады; сіз бір идентификаторды немесе олардың барлығын бірден көшіре аласыз.
Бұл беттің ерекшелігі — UUID v4 122 бит кездейсоқтықты пайдаланады және уақыт белгісін қамтымайды. Әрбір мән болжау мүмкін емес, соқтығысу ықтималдығы елеусіз. UUID v7 немесе ULID-тен айырмашылығы, v4 идентификаторлары кездейсоқ ретпен орналасады — олар уақыт туралы ақпаратты көтермейді, бұл оларды негізгі кілт ретінде пайдаланған кезде дерекқор индекстерін бөлшектейді. Бұл бет сонымен қатар бас әріптер мен дефистерді қосуға мүмкіндік береді, бірақ ішкі кездейсоқтық пен пішім бекітілген. Әдепкі шығыс — кіші әріптермен, дефистермен. Кез келген опцияны өзгерту толық жиынды қайта жасайды.
UUID v4 құрылымы мен кездейсоқтығы
UUID v4 — 16 октеттегі 122 кездейсоқ бит, олар 8-4-4-4-12 үлгісінде 32 он алтылық таңба ретінде ұсынылған. Қалған 6 бит нұсқа мен вариацияны көрсету үшін бекітілген. Нақты айтқанда, UUID v4 стандарты бойынша:
- 4-октеттің жоғарғы 4 биті нұсқаны көрсету үшін 0100 (4) орнатылған.
- 6-октеттің жоғарғы 2 биті вариацияны көрсету үшін 10 орнатылған.
122 бит кездейсоқтық 2^122 ≈ 5.3 × 10^36 мүмкін мәнді білдіреді. Соқтығысу ықтималдығы туу күнінің соқтығысуынан әлдеқайда аз. Мысалы, жылына 1 миллиард UUID жасасаңыз, 100 жыл ішінде соқтығысу ықтималдығы 50% - дан төмен болады, егер сіз 2^73 идентификатор жасамасаңыз (бұл 9 × 10^21). Бұл көрсеткіштер кездейсоқтықтың сапасына байланысты: браузерлер crypto.getRandomValues() әдісін пайдаланады, ол платформалық криптографиялық кездейсоқ сандар генераторына (CSPRNG) негізделген. Бұл генераторлар операциялық жүйенің энтропия көздерінен (аппараттық сенсорлар, уақыт айырмашылықтары, пернетақта шабуылдары) алынған болжау мүмкін емес биттерді шығарады.
122 биттің іс жүзіндегі маңыздылығы: олар қауіпсіздік сессиялары, маркерлер, файл атаулары немесе анонимді кілттер үшін қолайлы. Уақыт белгісінің болмауы идентификаторлардың хронологиялық реті жоқ екенін білдіреді, бірақ болжау мүмкін еместікке кепілдік береді.
Бас әріптер мен дефис қосқыштары
Пайдаланушылар UUID v4 идентификаторларының көрінісін өзгерте алады:
- Бас әріптер: Әдепкі бойынша кіші әріптермен шығарылады. Бас әріптерге ауыстыру кезінде он алтылық таңбалар A-F үлкен әріптермен көрсетіледі. Бұл көрнекі айырмашылықты немесе жүйедегі басқа стандарттарға сәйкестікті қамтамасыз етеді.
- Дефистерді қосу: Әдепкі бойынша қосылады. Дефистерсіз UUID 32 таңбалы жол түрінде беріледі. Бұл пішім кейбір API немесе дерекқорлар үшін ыңғайлы болуы мүмкін, бірақ оқылуы қиындау.
Кез келген опцияны өзгерту (саны, бас әріптер, дефистер) бүкіл жиынды қайта жасайды. Мысалы, сіз 10 идентификаторды кіші әріптермен, дефистермен жасадыңыз, содан кейін бас әріптерді қоссаңыз, барлық 10 жаңа мәндер жасалады. Бұл күтілетін әрекет, өйткені әрбір опция өзгерісі кезінде жаңа кездейсоқ мәндермен толық регенерация жүреді.
Бас әріптер мен дефистердің болуы идентификаторлардың ішкі құрылымына әсер етпейді — олар тек көрінісін өзгертеді. Ішкі кездейсоқтық бірдей қалады, бірақ әрбір регенерация кезінде жаңа кездейсоқ биттер пайдаланылады.
Жергілікті өңдеу және қауіпсіздік
Барлық генерация браузеріңіздегі crypto.getRandomValues() арқылы жергілікті түрде орындалады. Ешқандай дерек серверге жіберілмейді, және генерация үшін желі қажет емес. Бұл келесі мүмкіндіктерді береді:
- Құпиялық: Сіздің идентификаторларыңыз ешқандай сыртқы серверге бағытталмайды.
- Қауіпсіздік: Криптографиялық кездейсоқтық болжау мүмкін емес, сондықтан шабуылдаушылар болашақ идентификаторларды болжай алмайды.
- Офлайн қол жетімділік: Бет жүктелгеннен кейін, интернет қажет емес.
Браузерлер кездейсоқ сандарды жасау үшін операциялық жүйенің энтропия көздерін пайдаланады. Windows жүйесінде бұл CryptGenRandom, Linux-те getrandom() немесе /dev/urandom, macOS-те SecRandomCopyBytes. Барлық заманауи браузерлер (Chrome, Firefox, Safari, Edge) осы механизмдерді қолдайды. Егер браузер криптографиялық кездейсоқтықты қамтамасыз ете алмаса (мысалы, ескірулі мобильді браузерлерде), онда бет сәтсіз аяқталуы мүмкін, бірақ қазіргі заманғы платформаларда бұл мәселе жоқ.
UUID v4 дерекқор өнімділігіне әсері
UUID v4 идентификаторларын негізгі кілт ретінде пайдалану белгілі бір кемшіліктерге ие. Өйткені олар кездейсоқ ретпен орналасады, B-ағаш индекстерде беттің бөлінуі жиі орын алады. Әсіресе, үлкен дерекқорларда жаңа идентификаторларды енгізу кезінде индекс фрагментациясы пайда болады, бұл оқу мен жазу жылдамдығын төмендетеді. Зерттеулер көрсеткендей, UUID v4 пайдаланғанда, бірте-бірте өсетін кілттерге (мысалы, бүтін санды AUTO_INCREMENT) қарағанда, беттің бөлінуі 30-40% - ға артуы мүмкін.
Алайда, бұл кемшілік орташа дерекқорларда (миллиардтардан аз жолдар) елеусіз болуы мүмкін. UUID v4 әлі де көптеген жағдайларда қолданылады:
- Қауіпсіздік маркерлері: Сессия идентификаторлары, API маркерлері — болжау мүмкін еместік маңызды.
- Анонимді кілттер: Пайдаланушылардың жеке деректерін байланыстырмайтын идентификаторлар.
- Бөлінген жүйелер: Әртүрлі серверлерде жасалған идентификаторлар уақыт белгісін үйлестірусіз бірегей болуы керек.
Егер уақыт бойынша сұрыптау маңызды болса, онда UUID v7 немесе ULID сияқты альтернативаларды қарастыру керек. Бірақ егер болжау мүмкін еместік және бірегейлік маңызды болса, UUID v4 ең жақсы таңдау болып қалады.
UUID v4 vs басқа идентификаторлар
Кестеде UUID v4, UUID v7, ULID және NanoID арасындағы негізгі айырмашылықтар көрсетілген:
| Сипаттама | UUID v4 | UUID v7 | ULID | NanoID |
|---|---|---|---|---|
| Уақыт белгісі | Жоқ | Иә (миллисекунд) | Иә (миллисекунд) | Жоқ |
| Кездейсоқ биттер | 122 | 62 | 80 | Әріптер санына байланысты |
| Соқтығысу ықтималдығы | 1/2^122 | 1/2^62 | 1/2^80 | Параметрлерге байланысты |
| Ұзындығы | 36 таңба | 36 таңба | 26 таңба | 21 таңба (әдепкі) |
| Сұрыптау мүмкіндігі | Кездейсоқ | Уақыт бойынша | Уақыт бойынша | Кездейсоқ |
| Браузердегі генерация | Иә | Иә | Иә | Иә |
Бұл бетте UUID v4 таңдалғанда, сіз тек осы пішімнің опцияларын көресіз. Егер пішім UUID v7, ULID немесе NanoID-ге өзгертілсе, бас әріптер мен дефистер қосқыштары өзгеруі мүмкін (мысалы, ULID 26 таңбалы, дефистер жоқ). Бірақ бұл факт парағы тек UUID v4-ке қатысты.
Жиі қойылатын сұрақтар
UUID v4 қаншалықты кездейсоқ?
UUID v4 122 бит кездейсоқтықты пайдаланады, бұл 2^122 ≈ 5.3 × 10^36 мүмкін мән. Бұл салыстырмалы түрде кез келген екі идентификатордың соқтығысу ықтималдығын елеусіз етеді. Криптографиялық кездейсоқтық пайдаланылады, сондықтан болжау мүмкін емес.
Неліктен идентификаторлар бас әріптермен немесе дефистерсіз көрсетілуі мүмкін?
Бас әріптер немесе дефистердің болмауы көрініс опцияларына байланысты. Кейбір жүйелерде бас әріптермен идентификаторлар стандартты болуы мүмкін, ал кейбір API-де дефистерсіз жолдар қажет. Ішкі кездейсоқтық өзгермейді, тек көрініс өзгереді.
Бір уақытта қанша идентификатор жасауға болады?
Сіз 1-ден 100-ге дейін идентификаторды бір уақытта жасай аласыз. Егер сізге 100-ден көп қажет болса, бірнеше рет жасауыңыз керек.
Идентификаторларды қалай көшіруге болады?
Бір идентификаторды көшіру үшін оны шертіңіз. Барлық көрсетілген идентификаторларды көшіру үшін "Copy all" түймесін басыңыз. Көшіруден кейін "Copied all!" хабарламасы пайда болады.
UUID v4 дерекқорда негізгі кілт ретінде пайдалануға бола ма?
Иә, бірақ кездейсоқ ретпен орналасуына байланысты индекс фрагментациясы болуы мүмкін. Егер дерекқор өте үлкен болса, уақыт бойынша сұрыпталатын альтернативаларды (UUID v7, ULID) қарастырған жөн. Алайда, шағын және орташа дерекқорларда бұл мәселе елеусіз.
Генерация браузерде орындалады ма?
Иә, барлық генерация браузеріңіздегі crypto.getRandomValues() көмегімен жергілікті түрде орындалады. Ешқандай дерек интернет арқылы жіберілмейді, сондықтан қауіпсіздік пен құпиялыққа кепілдік беріледі.