§

Kizalishi cha UUID — Kizalishi cha UUID v4 cha Mtandaoni cha Bure

v4 ni chaguo msingi. v7 hupanga kileksikografia kwa wakati wa uzalishaji na ni chaguo bora kwa funguo za hifadhidata.
Muundo wa matokeo
§

Matokeo

    Vitambulisho Vya Kipekee Duniani Kote huweka nguzo kwenye safu za utambulisho kwenye rafu ya data duniani kote: kila `id` ya chaguo msingi kwenye jedwali jipya la Supabase, PlanetScale, au AWS Aurora PostgreSQL ni aina ya `uuid`, kila kitu cha Stripe hubeba ufunguo unaofanana na UUID, na kila jedwali la safu ya Snowflake au BigQuery linalohitaji ufunguo imara wa mbadala hufikia RFC 9562 (hapo awali RFC 4122). Kizalishi hiki hutoa UUID za v4 za nasibu kwa kriptografia na UUID za v7 zilizopangwa kwa wakati kabisa kupitia API ya Kriptografia ya Wavuti ya kivinjari, kwa hivyo thamani za vitambulishi unazohifadhi kwa uzalishaji hazivuji kupitia mwisho wa mbali.

    UUID ni nini?

    UUID (Kitambulisho cha Kipekee Duniani Kote) ni thamani ya biti 128 iliyoonyeshwa kama mfuatano wa herufi 36 kama 550e8400-e29b-41d4-a716-446655440000. Muundo na semantiki za toleo zimefafanuliwa na RFC 4122 kwa v1 hadi v5, na na RFC 9562 kwa matoleo mapya ya v6, v7, na v8. Chombo hiki huzalisha v4 (ya nasibu kabisa), v1 (muhuri wa wakati pamoja na kitambulisho cha nodi ya nasibu), na v7 (kiambishi awali cha muhuri wa wakati wa millisekunde za Unix pamoja na kiambishi cha nasibu, kinachoweza kupangwa kwa wakati wa uzalishaji) — yote kwenye kivinjari chako, ukitumia API ya Kriptografia ya Wavuti ya jukwaa. Hakuna data inayotumwa kwa seva.

    Uzalishaji wa UUID unafanya kazi vipi?

    Kila toleo hupanga utaratibu wa uamuzi, uwezekano wa kupanga, na entropia tofauti. Chombo huchagua algorithm sahihi kulingana na uteuzi wako:

    1. v4 (ya nasibu) huita crypto.randomUUID() ya kivinjari, ambayo inarudisha biti 122 za nasibu ya kriptografia na biti 6 zisizobadilika (toleo 0100 na tofauti ya 10) zilizowekwa mahali sahihi. Migongano haifanyiki kinadharia — ungehitaji kuzalisha takriban quintillion 2.71 za UUID za v4 kupata nakala moja na uwezekano wa 50%.
    2. v1 (muhuri wa wakati + nodi) hupakia muhuri wa wakati wa Gregoriani wa biti 60 (kupiga kwa nanosekunde 100 tangu 1582-10-15) ndani ya time_low / time_mid / time_hi_and_version, huweka nibble ya toleo kwa 0001, huchagua mlolongo wa saa wa biti 14 na biti za tofauti zilizowekwa, na hutumia kitambulisho cha nodi cha nasibu cha biti 48 na biti ya multicasting ikiwa imewashwa (RFC 4122 §4.5 kwa uwazi inaruhusu kitambulisho cha nodi cha nasibu wakati hakuna MAC ya maunzi inayopatikana — biti ya multicasting huiweka alama kama isiyo ya MAC).
    3. v7 (muhuri wa wakati unaoweza kupangwa), kulingana na RFC 9562 §5.7, hupanga muhuri wa wakati wa millisekunde za Unix wa biti 48 wa endian kubwa, kisha toleo la biti 4 0111, kisha biti 12 za nasibu, kisha tofauti ya biti 2 10, kisha biti 62 zaidi za nasibu. Kwa sababu muhuri wa wakati uko kwenye biti muhimu zaidi, UUID za v7 hupanga kileksikografia kwa mpangilio wa uzalishaji — mali ambayo hakuna toleo lingine la UUID inayotoa bila usimbaji zaidi.
    4. Nasibu yote inatoka kwa crypto.getRandomValues(), RNG salama kwa kriptografia ya kivinjari. Toleo v1 na v7 vyote vina ulinzi wa mfululizo wa ndani ya kugonga ili simu mbili zinazofuatana ndani ya kugonga kwa saa ile ile bado zipange ya pili juu ya ya kwanza — muhimu kwa uendeshaji wa uzalishaji kwa wingi ambao unashindana na saa ya millisekunde.
    5. Mfumo wa muundo unafanya kazi baada ya uzalishaji. Unaweza kuondoa nyuzi, kubadilisha kuwa herufi kubwa, kufunika thamani katika mabano ({…} — mkataba wa Microsoft GUID), au kuonyesha baiti 16 za ghafi kama base64 (matokeo ya herufi 22, bila upachikaji). Hali ya base64 hubatilisha chaguo nyingine za muundo kwa sababu base64 ni uwakilishi wake.

    Kwa nini kutumia kizalishi hiki cha UUID?

    • Hakuna kinachoondoka kwenye kivinjari chako. API ya Kriptografia ya Wavuti inafanya kazi ndani ya nchi; ukurasa hautokelezi maombi ya mtandao baada ya kupakia hati ya awali. Fungua DevTools, bonyeza Zalisha, na paneli ya Mtandao inabaki kimya.
    • Matokeo sahihi ya RFC. v4 inafuata RFC 4122 §4.4, v1 inafuata §4.2 na §4.5, na v7 inafuata RFC 9562 §5.7. Nibble ya toleo na biti za tofauti zimewekwa mahali ambapo viwango vinasema vihusike — kila UUID inathibitishwa dhidi ya regex ya toleo ya kawaida.
    • v7 inayoweza kupangwa kwa funguo za hifadhidata. UUID ya v7 inayotumika kama ufunguo mkuu wa kuelekeza kwenye Postgres, MySQL, au SQL Server huhifadhi uingizaji ukiongeza tu kwenye faharasa — hakuna kugawanyika kwa ukurasa, hakuna I/O ya nasibu — huku bado ikiwa ya kipekee duniani kote. v4 haiwezi kufanya hivi kwa sababu biti zake ni za nasibu.
    • Uzalishaji kwa wingi bila vikwazo vya kiwango. Zalisha UUID 1, 10, 100, au 1,000 mara moja. Hakuna kota na hakuna usajili — chombo kinaendesha kwenye kichupo chako, kwa hivyo kikomo ni CPU yako, si kiwango cha API ya muuzaji.

    Matumizi ya kawaida ya UUID ni yapi?

    UUID zinaonekana popote ambapo mfumo unahitaji kitambulisho cha kipekee duniani kote bila kuratibu na mamlaka kuu:

    • Funguo kuu za hifadhidata. Nambari zinazoongezeka kiotomatiki huvuja hesabu za safu na kuvunja kugawanya. UUID ni imara kwenye vipande, salama kuunganisha kwenye maeneo, na (na v7) huhifadhi uingizaji wa B-tree ukiwa hai bila kugawanyika kwa ukurasa. Programu ya kawaida huzalisha UUID upande wa mteja, kuipeleka kwenye uingizaji, na hailazimiki kufanya safari ya kwenda na kurudi kwa seva kwa ufunguo.
    • Vitambulisho vya kuhusisha maombi. Programu ya kati ya HTTP huambatanisha UUID ya v4 kwa kila ombi linaloingia, kuirekodi kwenye kila span, na kuieneza chini (mara nyingi kama kichwa cha X-Request-Id). Mteja anapowasilisha hitilafu, mhandisi wa msaada hubandika kitambulisho na mfuatano wote wa ombi unaonekana — kwenye huduma na maeneo ya wakati — bila utata.
    • Funguo za uhalisi. API za malipo (Stripe, Adyen, Square) zinakubali kichwa cha Idempotency-Key ili ombi linalojaribu tena lisichukulie mteja mara mbili. UUID iliyozalishwa na mteja inahakikisha ufunguo ni wa kipekee kwa kila operesheni ya kimantiki, ambayo ndiyo mkataba ambao API hizo zinahitaji.

    Mfano wa UUID unakaa vipi?

    Kwenye Node.js au kivinjari cha kisasa, mstari mmoja wa crypto.randomUUID() hurudisha UUID mpya ya v4 — kwa mfano 3f50b5a8-2c54-4b9c-9c1f-3e5c7e2b8d12. Itumie hiyo kwa kitambulisho cha ombi au ufunguo wa uhalisi. UUID inapokwenda kwenye safu ya hifadhidata ambayo itakuwa ufunguo mkuu wa kuelekeza, zalisha v7 badala yake: thamani mbili za v7 zilizozalishwa millisekunde moja kando, kama 0190a3b0-7d4f-7c9e-8b21-a4d6f0bd9c11 na 0190a3b0-7d50-7f15-9c4e-72b3e0c1d8a4, hupanga kileksikografia kwa mpangilio wa uzalishaji. Aina ya `uuid` ya Postgres huhifadhi matoleo yote kwa njia sawa — tofauti inaonekana wakati wa uandishi wa faharasa, ambapo uingizaji wa v7 unaongeza upande wa kulia wa B-tree wakati uingizaji wa v4 unatawanyika na kulazimisha I/O ya nasibu.

    Kizalishi hiki cha UUID hufanya kazi moja: kubadilisha kubonyeza kuwa vitambulishi moja au vingi vinavyozingatia RFC, vimeumbizwa jinsi unavyovihitaji, bila kutuma ombi lako kwa seva. Chagua toleo, chagua idadi, chagua muundo — zalisha, nakili, endelea.