§

Mai Ƙirƙirar UUID — Mai Ƙirƙirar UUID v4 na Online Kyauta

v4 shine tsohuwa. v7 yana daidaita ta hanya ta lexicographic ta lokacin samarwa kuma shi ne mafi kyau don maɓallan bayanan bayanai.
Tsarin fitar
§

Fitar

    Masu tanadar na UUID suna magana ne a ko'ina a cikin ayyuka na dijital: kowane `id` tsohuwa a cikin tebur sabon na Supabase, PlanetScale, ko AWS Aurora PostgreSQL nau'i ne na `uuid`, kowane abin Stripe yana ɗauke da maɓalli mai sifar UUID. Wannan mai ƙirƙira yana fitar da UUID na v4 mai bazuwar lambobin aminci ta hanyar API ɗin Web Crypto na mai bincike, don ƙimomi na masu tanadar da ka tanada don samarwa ba su zube ta ƙarshen nesa ba.

    Menene UUID?

    A UUID (Matakin Gano Ingantaccen Duniya) shine ƙima mai bit 128 da aka nuna a matsayin kirtanin haruffa 36 kamar 550e8400-e29b-41d4-a716-446655440000. Tsari da ma'anar nau'i an ayyana su ta RFC 4122 don v1 zuwa v5, da ta RFC 9562 don v6, v7, da v8 na sabon. Wannan kayan aiki yana samar da v4 (mai bazuwar gaba ɗaya), v1 (lokaci da ƙarin ID na node bazuwar), da v7 (prefix na lokacin millisecond na Unix da ƙarin suffix bazuwar, mai iya daidaita ta lokacin samarwa) — duk a cikin mai bincike, ta amfani da API ɗin Web Crypto na dandali. Ba a tura bayanai zuwa uwar garke.

    Yaya samar da UUID ke aiki?

    Kowane nau'i yana musayar tabbatarwa, daidaita, da entropy daban-daban. Kayan aiki yana zaɓar algorithm mai dacewa bisa ga zaɓinka:

    1. v4 (bazuwar) yana kiran crypto.randomUUID() na mai bincike, wanda ke dawo da bits 122 na bazuwar lambobin aminci tare da bits 6 masu tsauri (nau'i 0100 da bambancin 10) da aka sanya a wuraren da suka dace. Karowa ba su da yiwuwar — za a buƙaci samar da UUID na v4 kusan 2.71 quintillion don karo da rumbun ɗaya tare da yiwuwar 50%.
    2. v1 (lokaci + node) yana tattara lokaci na Gregorian mai bit 60 (100-nanosecond ticks tun 1582-10-15) cikin time_low / time_mid / time_hi_and_version, yana sanya nibble na nau'i zuwa 0001, yana zaɓar jerin agogo mai bit 14 tare da bits na bambanci da aka sanya, kuma yana amfani da ID na node bazuwar mai bit 48 tare da bit na multicast da aka tilasta kunna (RFC 4122 §4.5 a fili yana ba da izinin ID na node bazuwar lokacin da babu MAC na kayan masarufi — bit na multicast yana alamar sa a matsayin ba MAC ba).
    3. v7 (lokaci mai iya daidaita), bisa ga RFC 9562 §5.7, yana shimfida lokaci na big-endian Unix-millisecond mai bit 48, sannan nau'in bit 4 0111, sannan bits bazuwar 12, sannan bambancin bit 2 10, sannan bits bazuwar 62 ƙari. Saboda lokaci yana a cikin mafi muhimmancin bits, UUID na v7 suna daidaita ta lexicographically a cikin tsarin samarwa — dukiya da babu wani nau'in UUID ɗin da ke bayarwa ba tare da ƙarin ɓoyewar ba.
    4. Duk bazuwar na zuwa daga crypto.getRandomValues(), RNG mai aminci ta hanyar aminci na mai bincike. Duka v1 da v7 suna haɗa kiyayen monotonic na cikin-tick don kiran biyu jere a cikin iri ɗaya na tick har yanzu yana daidaita na biyu a sama da na farko — muhimmi don gudanar da samarwa yawa waɗanda ke gasa da agogon millisecond.
    5. Tsarin tsari yana gudana bayan samarwa. Kana iya cire hyphens, sauya zuwa babba, naɗa ƙima a cikin ƙofofin gefe ({…} — al'adar GUID na Microsoft), ko nuna bytes asali 16 a matsayin base64 (fitar haruffa 22, babu ɗaura). Yanayin Base64 yana cike sauran zaɓuɓɓukan tsari saboda base64 wakilci na sa ne.

    Me ya sa amfani da wannan mai ƙirƙirar UUID?

    • Babu abin da ke barin mai bincike ɗinka. API ɗin Web Crypto yana gudana a cikin gida; shafin baya yin buƙatun cibiyar sadarwa bayan lodin takardar farko. Buɗe DevTools, danna Samar, kuma panel ɗin Network zai kasance shiru.
    • Fitar da ta dace da RFC. v4 yana bin RFC 4122 §4.4, v1 yana bin §4.2 da §4.5, da v7 yana bin RFC 9562 §5.7. Nibble na nau'i da bits na bambanci an sanya su inda ma'aunin suke cewa sun kasance — kowane UUID yana tabbatarwa akan regex na nau'i canonical.
    • v7 mai iya daidaita don maɓallan bayanan bayanai. UUID na v7 da aka yi amfani da shi a matsayin maɓalli na asali da aka haɗa a cikin Postgres, MySQL, ko SQL Server yana kiyaye saka a kan index a matsayin append kawai — babu rarrabuwar shafi, babu I/O bazuwar — yayin da har yanzu yana musamman a duniya. v4 ba zai iya yin wannan ba saboda bits ɗin ta bazuwar ne.
    • Samarwa yawa ba tare da iyakokin ƙidaya ba. Samar da 1, 10, 100, ko 1,000 UUID a lokaci ɗaya. Babu ƙayyade kuma babu rajista — kayan aiki yana gudana a tab ɗinka, don haka rufin shi ne CPU ɗinka, ba ɓangare na API na vendor ba.

    Waɗanne amfani na gama-gari na UUID akwai?

    UUID yana bayyana ko'ina tsari ke buƙatar matakin gano ingantaccen duniya ba tare da daidaitawa da hukuma ta tsakiya ba:

    • Maɓallan asali na bayanan bayanai. Integers da ke ƙaruwa kai tsaye suna fallasa ƙidayan layi kuma suna karya sharding. UUID suna da ɗorewa a duk shards, aminci don haɗawa a duk yankunan, kuma (tare da v7) suna kiyaye saka B-tree yana zafi ba tare da rarrabuwar shafi ba. App na yau da kullun yana samar da UUID a bangaren abokin ciniki, yana tura shi a saka, kuma ba ya buƙatar zagaye-tafiya uwar garke don maɓalli.
    • ID na daidaita buƙatu. Middleware na HTTP yana haɗa UUID na v4 a kan kowane buƙata mai iso, yana loga shi a kan kowane span, kuma yana watsa shi ƙasa da ruwa (akai-akai a matsayin take na X-Request-Id). Lokacin da abokin ciniki ya ba da rahoto da kuskure, injiniyan tallafi yana liƙa ID ɗin kuma duka binciken buƙatar yana fitowa — a duk sabis da yankunan lokaci — ba tare da rikicewa ba.
    • Maɓallan idempotency. API ɗin biyan kuɗi (Stripe, Adyen, Square) suna karɓan take na Idempotency-Key don buƙata da aka sake gwadawa ba ta caji abokin ciniki sau biyu ba. UUID da abokin ciniki ya samar yana tabbatar maɓalli na musamman a kowane aikin ma'ana, wanda shi ne kwangilar da waɗancan API suke buƙata.

    Yaya misali na UUID ke kama?

    A cikin Node.js ko mai bincike na zamani, layi ɗaya na crypto.randomUUID() yana dawo da UUID sabon na v4 — misali 3f50b5a8-2c54-4b9c-9c1f-3e5c7e2b8d12. Yi amfani da hakan don ID na buƙata ko maɓalli na idempotency. Lokacin da UUID yana zuwa cikin ginshiƙin bayanan bayanai wanda zai zama maɓalli na asali da aka haɗa, samar da v7 maimakon: ƙimomi biyu na v7 da aka samar millisecond ɗaya daban, kamar 0190a3b0-7d4f-7c9e-8b21-a4d6f0bd9c11 da 0190a3b0-7d50-7f15-9c4e-72b3e0c1d8a4, suna daidaita ta lexicographically a cikin tsarin samarwa. Nau'in `uuid` na Postgres yana adana duka nau'uka iri ɗaya — bambancin yana bayyana a lokacin saka-index, inda saka na v7 ke haɗawa a dama na B-tree yayin da saka na v4 ke watse suna tilasta I/O bazuwar.

    Wannan Mai Ƙirƙirar UUID yana yin aiki guda ɗaya: canza dannawa zuwa ɗaya ko yawa UUID waɗanda suka dace da RFC, da aka tsara yadda kake buƙata, ba tare da tura buƙatarka zuwa uwar garke ba. Zaɓi nau'i, zaɓi adadi, zaɓi tsari — samar, kwafi, ci gaba.