UUID v4 үүсгэгч

UUID v4 утгуудыг онлайнаар үүсгээрэй: 122 санамсаргүй бит, стандарт UUID хэлбэр болон хуулж авахад бэлэн үр дүнгүүд таны хөтөч дээр байна.

Формат
Үүсгэсэн ID-нууд
Бэлэн. UUID v4 утгуудыг өөрийн хөтөч дээр үүсгээрэй.

Энэхүү ID хэрхэн бүтдэг вэ

Бүтэц
Хувилбар 4 болон RFC хувилбарын битүүд бүхий 128 битийн UUID, 8-4-4-4-12 хэмжээтэй 16-тын бүлгүүдээр харуулав.
Энтропи
crypto.randomUUID() функцээс үүсэх 122 санамсаргүй бит.
Цаг
Байхгүй; v4 ID-нууд нь хэзээ үүсгэгдсэнийг илчлэхгүй.
Давхцах эрсдэл
Давхцал нь 122 санамсаргүй битээр зохицуулагддаг бөгөөд энэ нь ердийн системүүдийн практик хэрэглээнээс хамаагүй давсан үзүүлэлт юм.
Жишээ
3b2e19bf-b810-4a16-be4d-364fc6112fd8

Таны ID-нуудыг хөтчийн найдвартай санамсаргүй тоо үүсгэгчээр локал байдлаар үүсгэдэг. BroBroGo руу юу ч илгээгдэхгүй.

Түгээмэл асуултууд

Би хэзээ UUID v4 ашиглах хэрэгтэй вэ?

Үүсгэсэн цагаар эрэмбэлэгддэггүй, цаг хугацааны мэдээллийг ил гаргадаггүй далд санамсаргүй танигч хэрэгтэй үед UUID v4-ийг ашиглана уу.

Зураасыг хасах эсвэл гаралтыг том үсэгтэй болгож болох уу?

Тийм ээ. UUID v4 хэрэгсэл нь UUID тохиргооны хэсгийг агуулдаг тул та зураасыг хасах болон том үсгээр гаргах тохиргоог сольж болно.

UUID v4 генератор: 122 бит санамсаргүй байдлаар үүсгэсэн өвөрмөц тодорхойлогч

Энэ хуудас нь UUID v4 (Universally Unique Identifier version 4) – 122 бит цэвэр санамсаргүй тооноос бүрдэх, 36 тэмдэгтийн стандарт 8‑4‑4‑4‑12 хэлбэртэй тодорхойлогчийг үүсгэдэг. Үлдсэн 6 бит нь хувилбар ба хувилбарын төрлийн тогтмол битүүд (version bits 4 бит, variant bits 2 бит) юм. Энэ нь цаг хугацаа эсвэл дарааллаар ангилагддаггүй гэсэн үг. Хэрэв UUID v4-ийг өгөгдлийн сангийн гол түлхүүр болгон ашиглавал B‑tree индексүүдийг хэсэгчлэн хувааж, гүйцэтгэлд сөрөг нөлөө үзүүлж болно. Харин коллизийн магадлал нь 122 битийн энтропийн ачаар практикийн хувьд үл тоомсорлосон хэмжээнд байна. Хуудас нь дээд регистр (uppercase) болон дефис (hyphen) тохиргоог өөрчлөх боломжийг олгодог бөгөөд эдгээр нь зөвхөн UUID v4 болон v7-д хамаарах онцлог юм (бусад ID төрөлд өөр хяналтын элементүүд ашиглагддаг).

UUID v4-ийн бүтэц ба 122 бит санамсаргүй байдал

UUID v4 нь нийт 128 битээс бүрдэнэ. Үүнээс:

  • 4 бит нь хувилбарыг (version) заадаг – энэ нь 0100 буюу аравтын 4.
  • 2 бит нь хувилбарын төрлийг (variant) заадаг – энэ нь 10 буюу RFC 4122 стандартын дагуу.
  • Үлдсэн 122 бит нь санамсаргүй (random) тоо.

Каноник дүрслэл нь 8 тэмдэгт, дефис, 4 тэмдэгт, дефис, 4 тэмдэгт, дефис, 4 тэмдэгт, дефис, 12 тэмдэгт гэсэн хэлбэртэй. Жишээ нь: f47ac10b-58cc-4a34-8b4c-2e8d1f2e9c0a. Энэ тэмдэгт мөр нь зөвхөн 16-тын цифрүүд (0–9, a–f) болон дөрвөн дефис агуулдаг. Хэрэв дефисүүдийг хасав 32 тэмдэгтийн урттай мөр болно. Дээд регистрийг асаахад a–f үсгүүд A–F болж өөрчлөгдөнө.

Стандарт нь RFC 4122 (2005 он) бөгөөд одоо ч өргөн хэрэглэгддэг. Генератор нь browser-ийн crypto.randomUUID() API эсвэл үүнтэй тэнцэх криптографийн санамсаргүй тоо үүсгэгчийг ашигладаг. Энэ нь серверт ямар ч мэдээлэл илгээхгүйгээр, бүрэн локал байдлаар ажилладаг.

Коллизийн магадлал ба 122 битийн энтропи

122 бит санамсаргүй байдал гэдэг нь 2^122 боломжит тодорхойлогч байна гэсэн үг. Коллизийн магадлалыг ойролцоогоор тооцоолохын тулд төрсөн өдрийн парадокс (birthday problem) ашигладаг. Томъёо нь:

P(коллизи) ≈ 1 - exp(-n² / (2 * N))

Энд n нь үүсгэсэн UUID-ийн тоо, N нь боломжит тодорхойлогчдын тоо (2^122). Жишээ нь, 1 триллион (10^12) UUID үүсгэхэд коллизийн магадлал ойролцоогоор 10^-15 орчим байдаг. Практикт энэ нь тэгтэй тэнцүү гэж үзэж болно. Тиймээс UUID v4 нь өргөн хүрээний системд, жишээ нь олон сая объект, сесс эсвэл үйл явдлын хувьд аюулгүй сонголт юм.

Гэхдээ энэ нь зөвхөн санамсаргүй тоо үүсгэгч хангалттай сайн байх нөхцөлд хүчинтэй. Browser-ийн crypto объект нь энэ шаардлагыг хангадаг. Хэрэв сул санамсаргүй тоо үүсгэгч (Math.random() гэх мэт) ашиглавал коллизийн эрсдэл нэмэгдэж болно.

B‑tree индексчлэлд үзүүлэх нөлөө

UUID v4 нь санамсаргүй дарааллаар үүсдэг. Хэрэв та өгөгдлийн сангийн хүснэгтэд түүнийг гол түлхүүр (primary key) болгон ашиглавал шинэ бичлэг нэмэх бүрт B‑tree индексийн дурын хуудас (page) руу орох магадлалтай. Үүний үр дүнд:

  • Индекс хуудасны хуваагдал (page split) их гарч, орон зай үрэлгэн болно.
  • Бичих (write) гүйцэттэл муудна, учир нь дискний санамсаргүй хандалт ихсэнэ.
  • Индексийг кэш хийх үр ашиг багасна (кэш hit rate буурна).

Үүнээс ялгаатай нь UUID v7 нь цаг хугацааны дарааллыг агуулдаг (осерийн утгыг өндөр битэнд хадгалдаг). Энэ нь B‑tree индексэд дараалсан оруулга хийх боломжийг олгож, фрагментацийг бууруулдаг. ULID нь мөн төстэй давуу талтай. Төсөл дээрээ UUID v4 эсвэл v7-г сонгохдоо эдгээр ялгааг харгалзан үзэх хэрэгтэй. Хэрэв индексний гүйцэттэл чухал бол v7 нь илүү тохиромжтой.

Ашиглах тохиолдлууд

UUID v4 нь дараах нөхцөлд тохиромжтой:

  • Тархсан систем (distributed systems): Төвлөрсөн координаторгүйгээр олон зангилаа (node) бие даан тодорхойлогч үүсгэх шаардлагатай үед.
  • API токенууд ба хүсэлтийн ID: Цаг хугацааны хамаарлаас зайлсхийх, таахад хэцүү байх шаардлагатай үед. UUID v7 нь цагийг илчилдэг бол v4 нь илчилдэггүй.
  • Бичлэгийн тоог нуух: Дараалсан ID (1, 2, 3 гэх мэт) ашиглавал халдагчид бичлэгийн тоог хялбархан мэдэж болно. Санамсаргүй ID нь үүнийг хэцүү болгодог.
  • Офлайн үеийн үүсгэлт: Интернэт холбоогүй үед өвөрмөц тодорхойлогч шаардлагатай.
  • Туршилтын өгөгдөл: Мэдээллийн санг реалист өвөрмөц утгаар дүүргэх үед.

Формат тохиргоо: дефис ба регистр

Дээд регистр (Uppercase): Зарим системүүд (жишээ нь Windows-д зориулсан зарим хэрэгслүүд) UUID-г дээд регистрээр харуулахыг шаарддаг. Бусад системүүд ялгахгүй (case-insensitive). Дээд регистр ашиглавал хүн уншихад хялбар байж болох ч хэмжээ ижил хэвээр байна.

Дефис (Hyphen): Стандарт UUID нь дөрвөн дефис агуулдаг. Дефис нь унших болон хуулахад хялбар болгодог. Гэхдээ зарим контекст (жишээ нь URL-д ашиглах, файлын нэрэнд оруулах) дефисгүй 32 тэмдэгтийн хувилбар илүү тохиромжтой. Дефис арилгахад тодорхойлогч нь зөвхөн 16-тын цифрүүдээс бүрдэх бөгөөд энэ нь алдаа гаргах магадлалыг бууруулдаг.

Тохиргоог өөрчлөх бүрт бүх ID нь шууд дахин үүсгэгддэг. Хэрэв та аль хэдийн үүсгэсэн ID-г өөрчлөх шаардлагатай бол шинээр үүсгэх шаардлагатай болно.

Browser талын генерацийн давуу тал

Бүх үүсгэлт хэрэглэгчийн browser дотор явагддаг. Энэ нь:

  • Нууцлал: Ямар ч өгөгдөл серверт илгээгдэхгүй.
  • Хурд: Сүлжээний хоцролтгүйгээр шууд үр дүн гарна.
  • Боломжтой байдал: Интернэт холбоогүй ч ажиллана (HTML хуудас cache-д байгаа л бол).
  • Тохиромжтой API: crypto.randomUUID() нь орчин үеийн бүх browser-д дэмжигддэг.

Генератор нь 1-ээс 100 хүртэлх тооны ID-г нэг дор үүсгэж чадна. Тоо хязгаар нь практик хэрэглээнд тохирсон. 100-аас дээш ID шаардлагатай бол хэд хэдэн удаа үүсгэх шаардлагатай.

Түгээмэл асуултууд (FAQ)

1. UUID v4 нь UUID v7-оос юугаараа ялгаатай вэ? UUID v4 нь бүрэн санамсаргүй, харин v7 нь цаг хугацааны дарааллыг агуулдаг. v7 нь B‑tree индексэд илүү найрсаг, учир нь шинэ ID нь дараалан үүсдэг. v4 нь нууцлал шаардсан хэрэглээнд илүү тохиромжтой (цагийг илчилдэггүй).

2. UUID v4-ийг өгөгдлийн сангийн гол түлхүүр болгон ашиглах нь зөв үү? Зөв, гэхдээ индекс гүйцэттэлд сөрөг нөлөөтэй. Их хэмжээний бичилттэй системд v7 эсвэл ULID ашиглах нь дээр. Бага хэмжээний системд v4 нь хүлээн зөвшөөрөгдөхүйц.

3. Би нэг дор хэдэн UUID v4 үүсгэж болох вэ? Хуудас нь нэг удаад 1-ээс 100 хүртэлх тооны UUID үүсгэхийг зөвшөөрдөг.

4. Хэрхэн бүх үүсгэсэн ID-г хуулах вэ? "Copy all" товчлуур дээр дарснаар бүх ID-г нэг дор санах ойд хуулах боломжтой. Дараа нь "Copied all!" гэсэн мессеж гарч ирнэ. Мөн тус тусад нь ID дээр дарж хуулж болно.

5. UUID v4 нь бүрэн аюулгүй юу? Энэ нь криптографийн сайн санамсаргүй тоо үүсгэгч дээр суурилдаг. Таахад хэцүү, гэхдээ бүрэн аюулгүй гэж баталгаажуулах боломжгүй. Ерөнхийдөө API токен, сесс ID-нд тохиромжтой.

6. Дефисгүй UUID v4 нь өөр төрлийн ID-тай андуурагдах уйдах уу? Дефисгүй 32 тэмдэгтийн мөр нь зөвхөн 16-тын цифрүүдээс бүрддэг. Энэ нь UUID-ийн бусад хувилбарууд эсвэл дурын 32 тэмдэгтийн hex мөртэй адилхан харагддаг. Контекстээс хамааран тодорхойлох боломжгүй байж болно. Стандарт форматыг хадгалах нь зүйтэй.