UUID உருவாக்கி

உலாவியிலேயே UUID-ஐ உருவாக்கவும்: சமவாய்ப்பான v4, நேர வரிசைப்படியான v7 அல்லது உறுதியான v5. ஒரே நேரத்தில் 1000 வரை, தரவு சாதனத்தை விட்டு வெளியேறாது.

தேர்ந்தெடுக்க 'உருவாக்கு' அழுத்தவும்
பதிப்பு
மேம்பட்ட விருப்பங்கள்

வேறொருவர் உருவாக்கிய ஒன்றோடு எக்காலத்திலும் முரண்படாத, நீங்கள் கேள்விப்பட்டிராத ஒரு கணினியில் உருவாக்கப்பட்ட, யாரிடமும் அனுமதி கேட்கத் தேவையில்லாத ஒரு அடையாளங்காட்டி (identifier) உங்களுக்குத் தேவையா? அதைத்தான் ஒரு UUID செய்கிறது. இது 128-பிட் (128-bit) கொண்ட ஒரு எண், வழக்கமான 8-4-4-4-12 என்ற வடிவமைப்பில் 36 எழுத்துருக்களாக எழுதப்படுகிறது. யாருக்கு எந்த எண் கிடைக்கும் என்பதை எதுவும் ஒருங்கிணைக்கவில்லை என்றாலும், அவற்றில் எந்த இரண்டும் ஒரே மாதிரியாக இருக்கப் போவதில்லை என்பதே இதன் முழு வடிவமைப்பாகும். இந்த இலவச உருவாக்கி அவற்றை உங்கள் உலாவியிலேயே உருவாக்குகிறது: 'பதிப்பு' என்பதில் ஒரு பதிப்பைத் தேர்வு செய்யவும், 'தேர்வுகளின் எண்ணிக்கை' என்பதில் உங்களுக்கு எத்தனை வேண்டும் என்று சொல்லவும், பின்பு 'உருவாக்கு' என்பதை அழுத்தவும். பெரும்பாலான திட்டங்கள் (projects) விரும்பும் பதிப்பான v4-இன் ஒற்றை அடையாளங்காட்டியுடன் இந்தப் பக்கம் திறக்கும், எனவே முதல் அடையாளங்காட்டி ஒரே கிளிக்கில் கிடைத்துவிடும்.

ஒவ்வொரு அடையாளங்காட்டியும் உங்கள் உலாவியால் Web Crypto API மூலம் உருவாக்கப்படுகிறது. உலாவி ஆதரிக்கும் இடங்களில் பதிப்பு 4 (v4) crypto.randomUUID() என்பதையும், மற்ற இடங்களில் crypto.getRandomValues() என்பதையும் பயன்படுத்துகிறது — இது Math.random() போன்ற போலி சமவாய்ப்பு (pseudo-random) JavaScript செயல்பாட்டிற்குப் பதிலாக, குறியாக்கவியல் ரீதியாக (cryptographically) பாதுகாப்பான சமவாய்ப்பின் (randomness) வலுவான ஆதாரமாகும். பதிப்பு 7 (v7) 48-பிட் மில்லிசெகண்ட் நேர முத்திரையை (timestamp) முன்னால் வைக்கிறது, பின்பு அதே மில்லிசெகண்டிற்குள் அதிகரிக்கும் 12-பிட் கவுண்டரையும் (counter), அதன் பிறகு 62 சமவாய்ப்பு பிட்களையும் கொண்டுள்ளது; இது RFC 9562-இல் விவரிக்கப்பட்டுள்ள வரிசைப்படுத்தும் முறையாகும்; ஆயிரம் UUID-கள் அடங்கிய ஒரு தொகுதி (batch) குலைக்கப்படாமல் வரிசையாக வெளிவர அந்த கவுண்டர் தான் காரணம். பதிப்பு 1 (v1) மல்டிகாஸ்ட் பிட் (multicast bit) அமைக்கப்பட்ட ஒரு சமவாய்ப்பு நோட் (node) அடையாளங்காட்டியுடன் நேர முத்திரையை இணைக்கிறது, எனவே 1990-களின் அசல் பயன்பாடுகள் செய்ததைப் போல இது ஒருபோதும் உங்கள் நெட்வொர்க் கார்டின் முகவரியைச் சுமப்பதில்லை. பதிப்புகள் 3 மற்றும் 5 ஆகியவை சமவாய்ப்பானவை அல்ல: அவை MD5 மற்றும் SHA-1 ஆகியவற்றைப் பயன்படுத்தி ஒரு பெயரிடைவெளியையும் (namespace) ஒரு பெயரையும் ஒன்றாக ஹாஷ் (hash) செய்கின்றன, மேலும் அந்த ஹாஷிங் உங்கள் சாதனத்திலேயே நடக்கிறது. சேவையகத்திற்கு (server) எதுவும் அனுப்பப்படுவதில்லை, எதுவும் பதிவேட்டில் (log) சேமிக்கப்படுவதில்லை, மேலும் பக்கம் ஏற்றப்பட்டவுடன் இணைய இணைப்பு துண்டிக்கப்பட்டாலும் இது தொடர்ந்து இயங்கும்.

'பதிப்பு' என்பது மற்ற அனைத்தையும் தீர்மானிக்கும் புலமாகும். பதிப்பு 4 என்பது 122 சமவாய்ப்பு பிட்களைக் கொண்டது மற்றும் எந்தவொரு அமைப்பும் அற்றது — இதுவே இயல்புநிலைத் தேர்வாகும் (default), மேலும் ஒரு அடையாளங்காட்டி தனித்துவமாக (unique) மட்டுமே இருக்க வேண்டியிருக்கும் போது இதுவே சரியான தேர்வாகும். பதிப்பு 7-ம் 62 சமவாய்ப்பு பிட்களைக் கொண்டுள்ளது, ஆனால் அது உருவாக்கப்பட்ட நேரத்துடன் தொடங்குகிறது, எனவே அவற்றின் ஒரு தொகுப்பு அவை உருவாக்கப்பட்ட நேரத்தின் வரிசைப்படி வகைப்படுத்தப்படும்; அடையாளங்காட்டி ஒரு தரவுத்தளத்தின் திறவுகோலாக (database key) மாறவிருக்கும் போது தேர்வு செய்ய வேண்டிய பதிப்பாக இது அமைவதற்கு அதுவே காரணம். பதிப்பு 1 என்பது நேரத்தை அடிப்படையாகக் கொண்ட அசல் திட்டமாகும், அது இன்னும் அதைக் கோரும் கணினிகளுக்காக இங்கே வைக்கப்பட்டுள்ளது. பதிப்புகள் 3 மற்றும் 5 ஒரு வித்தியாசமான ஜோடியாகும்: அவை உறுதியானவை (deterministic), அதாவது ஒரே உள்ளீடுகள் எப்போதும் ஒரே அடையாளங்காட்டியையே உருவாக்கும், மேலும் அவற்றுக்கு இரண்டு கூடுதல் புலங்கள் தேவைப்படுகின்றன — DNS, URL, OID மற்றும் X.500 ஆகிய நிலையான வெளிகளில் ஒன்றான அல்லது உங்களுடைய 'தனிப்பயன்' (Custom) ஒன்றான 'பெயரிடைவெளி', மற்றும் அடையாளம் காணப்படவிருக்கும் சரமான (string) 'பெயர்'. v5-க்கு URL பெயரிடைவெளியையும் https://example.com/a என்பதையும் உள்ளீடாகக் கொடுங்கள், இன்றும் நாளையும் வேறொருவரின் கணினியிலும் அதே UUID-ஐ நீங்கள் பெறுவீர்கள். இதன் காரணமாக, v3 அல்லது v5 தேர்ந்தெடுக்கப்படும் போது 'தேர்வுகளின் எண்ணிக்கை' மறைகிறது: ஒரு உறுதியான மதிப்பின் ஆயிரம் பிரதிகள் என்பது ஒரு உறுதியான மதிப்பின் ஆயிரம் பிரதிகளாக மட்டுமே இருக்கும். மற்ற ஒவ்வொரு பதிப்பிற்கும் 'தேர்வுகளின் எண்ணிக்கை' 1 முதல் 1000 வரை இருக்கலாம்.

நான்கு நிலைமாற்றிகள் (switches) அடியில் உள்ள 128 பிட்களை மாற்றாமல் வெளியீட்டின் வடிவத்தை மாற்றுகின்றன. 'பெரிய எழுத்துகள்' ஹெக்ஸாடெசிமல் (hexadecimal) இலக்கங்களை பெரிய எழுத்துகளில் அச்சிடுகிறது, 'நடுக்கோடுகள் இன்றி' என்பது சில நெடுவரிசைகளும் (columns) கோப்புப் பெயர்களும் விரும்பும் சுருக்கமான 32-எழுத்துரு வடிவத்தை அளிக்கிறது, மேலும் 'சுருள் அடைப்புக்குறிகள்' மதிப்பை { }-க்குள் சுற்றுகிறது — இந்த வடிவத்தையே Windows மற்றும் .NET உலகங்கள் GUID என்று அழைக்கின்றன. 'மேம்பட்ட விருப்பங்கள்' என்பதன் கீழ், urn:uuid: என்பது இதை ஒரு முறையான URN ஆக மாற்றும் முன்னொட்டைச் (prefix) சேர்க்கிறது; இது இயக்கத்தில் இருக்கும் போது 'சுருள் அடைப்புக்குறிகள்' மற்றும் 'நடுக்கோடுகள் இன்றி' ஆகியவற்றை அணைத்து விடுகிறது, ஏனெனில் தரநிலையானது (standard) சரியாக ஒரே ஒரு URN வடிவத்தை மட்டுமே அனுமதிக்கிறது மற்றும் அது நடுக்கோடுகளுடன் கூடிய நியமன (canonical) வடிவமாகும். நீங்கள் ஒரு தொகுதியை எடுக்கும்போது அது எவ்வாறு இணைக்கப்படுகிறது என்பதை 'நகலெடுக்கும் வடிவம்' தீர்மானிக்கிறது: ஒரு வரிக்கு ஒன்றாக, காற்புள்ளிகளால் பிரிக்கப்பட்டு, அல்லது குறியீட்டில் (code) உள்ள ஒரு வரிசையில் (array) நேரடியாக ஒட்டுவதற்காக (paste) ஒவ்வொரு மதிப்பும் மேற்கோள் குறிகளுடன் இறுதியில் ஒரு காற்புள்ளியுடன். முடிவிற்கு கீழே பிட்களில் சமவாய்ப்பைத் தெரிவிக்கும் ஒரு வரி உள்ளது — v4-க்கு 122, v7-க்கு 62 — மேலும், v7-ஐப் பொறுத்தவரை, தொகுதியின் முதல் அடையாளங்காட்டியினுள் குறியாக்கம் (encode) செய்யப்பட்ட நேர முத்திரை, அதனால் மதிப்பிற்குள் உள்ள நேரம் மறைமுகமாக இல்லாமல் வெளிப்படையாகத் தெரியும். 'அனைத்தையும் நகலெடு' மற்றும் 'கோப்பில் சேமி' ஆகிய இரண்டும் 'நகலெடுக்கும் வடிவம்' என்பதைப் பின்பற்றுகின்றன. 'வரலாறு' உங்கள் உலாவியிலேயே உங்களின் முந்தைய 10 தொகுதிகளை வைத்திருக்கிறது: மீண்டும் கொண்டுவர ஒன்றைக் கிளிக் செய்யவும், ஒற்றை உள்ளீட்டை நகலெடுக்கவும் அல்லது நீக்கவும், அல்லது அனைத்தையும் அழிக்கவும். 'அழி' பொத்தான் முடிவை மட்டும் காலி செய்து உங்கள் அமைப்புகளை அப்படியே விட்டுவிடுகிறது, மேலும் 50 அடையாளங்காட்டிகளுக்குப் பிறகு, பட்டியல் ஐம்பது வரிசைகளுக்குப் பதிலாக ஒற்றை உருட்டக்கூடிய (scrollable) தொகுதியாக மாறுகிறது.

இந்தப் பக்கத்தில் மிகவும் விளைவுகளை ஏற்படுத்தக்கூடிய விஷயம் v4 மற்றும் v7-க்கு இடையிலான முதன்மைத் திறவுகோல் (primary key) என்ற வகையிலான வேறுபாடாகும், இது வெறும் விருப்பம் சார்ந்த விஷயம் அல்ல. தரவுத்தளத்தின் குறியீடுகள் (indexes) வரிசைப்படுத்தப்பட்ட (sorted) முறையில் வைக்கப்பட்டிருக்கும் மரங்கள் (B-trees) ஆகும், மேலும் அந்த வரிசையில் ஒரு புதிய திறவுகோல் எங்கு இறங்குகிறது என்பது செருகும் (insert) பணிக்கு எவ்வளவு உழைப்பு தேவை என்பதைத் தீர்மானிக்கிறது. ஒரு v4 திறவுகோல் சமவாய்ப்பானது (random), எனவே தொடர்ச்சியான செருகல்கள் குறியீட்டின் தொடர்பில்லாத மூலைகளில் இறங்குகின்றன: நிரம்பிய பக்கங்கள் பிரிக்கப்படுகின்றன (page split), தரவுத்தளத்தால் நினைவகத்தில் வைக்கப்பட்டிருக்கும் மரத்தின் பகுதிகள் அடுத்த செருகலுக்குத் தேவையான பகுதிகளாக இருப்பது அரிது, மேலும் அந்த குறியீடு அது சுட்டிக்காட்டும் வரிசைகள் (rows) நியாயப்படுத்துவதை விட மிகப் பெரியதாகவும் மிகவும் துண்டு துண்டாகவும் (fragmented) முடிவடைகிறது. ஒரு v7 திறவுகோல் தற்போதைய மில்லிசெகண்டுடன் தொடங்குகிறது, எனவே தொடர்ச்சியான செருகல்கள் மரத்தின் வலதுபுற விளிம்பில் ஒன்றன்பின் ஒன்றாக இறங்குகின்றன, இது தானாக-அதிகரிக்கும் ஒரு முழு எண் (auto-incrementing integer) உருவாக்கும் அமைப்பாகும், மேலும் குறியீட்டு கட்டமைப்புகள் (index structures) இதைச் சுற்றியே உருவாக்கப்பட்டன. இதுதான் அந்த முழுப் பரிமாற்றம்: ஒரு சேவையகத்தைக் கேட்காமலேயே யார் வேண்டுமானாலும் ஒன்றை உருவாக்கலாம் என்ற UUID-களை நீங்கள் முதலாவதாகத் தேர்ந்தெடுக்கச் செய்த பண்பினைத் தக்கவைத்துக் கொண்டே, ஒரு தொடர் திறவுகோலின் (sequential key) செருகும் நடத்தையை v7 உங்களுக்கு அளிக்கிறது. இதற்குப் பதிலாக உருவாக்கப்பட்ட நேரம் இப்போது அடையாளங்காட்டிக்குள் படிக்கக்கூடியதாக இருக்கும், அது ஒரு பொருட்டா என்பது உங்கள் தரவைப் பற்றிய கேள்வியே தவிர, வடிவத்தைப் பற்றியது அல்ல.

எதுவும் ஒருபோதும் ஒரு UUID-இன் தனித்துவத்தை (uniqueness) சரிபார்ப்பதில்லை; அதன் அளவுதான் அதற்கான உத்தரவாதம். பதிவேடு (registry) இல்லை, சேவையகத்திற்குச் சென்று வரும் பயணம் (round-trip) இல்லை, தேடல் (lookup) இல்லை — ஒரு உருவாக்கி ஒரு எண்ணை உருவாக்கி அதைக் கொடுக்கிறது, மேலும் அவற்றில் இரண்டு முரண்படாமல் (collide) இருப்பதற்குக் காரணம், v4-இல் சாத்தியமான 2^122 மதிப்புகள் உள்ளன என்பதே, இது சுமார் 5.3 அன்டெசிலியன் (5.3 × 10^36) ஆகும். பிறந்தநாள் பிரச்சனை (birthday problem) என்பது இதை அளவிடுவதற்கான நேர்மையான வழியாகும்: அவற்றில் ஏதேனும் இரண்டு பொருந்துவதற்கான 50% வாய்ப்பு ஏற்படுவதற்கு முன்பாக உங்களுக்குத் தோராயமாக 2.7 குயின்டிலியன் (2.7 × 10^18) அடையாளங்காட்டிகள் தேவைப்படும், இது 86 ஆண்டுகளுக்கு ஒவ்வொரு வினாடியும் ஒரு பில்லியன் புதிய UUID-களுக்குச் சமம். இது என்ன உறுதியளிக்கிறது, எதை உறுதியளிக்கவில்லை என்பதைப் பற்றி துல்லியமாக இருப்பது மதிப்புக்குரியது. இது ஒரு புள்ளிவிவர (statistical) உத்தரவாதமே தவிர, எண்கணித (arithmetic) உத்தரவாதம் அல்ல, மேலும் அடியில் உள்ள சமவாய்ப்பு (randomness) உண்மையானதாக இருக்கும் வரை மட்டுமே இது பொருந்தும் — மோசமாக விதைக்கப்பட்ட (seeded) ஒரு உருவாக்கி, அல்லது அதனுடைய என்ட்ரோபி பூலுடன் (entropy pool) சேர்த்து நகலெடுக்கப்பட்ட (cloned) ஒரு மெய்நிகர் இயந்திரம் (virtual machine), வடிவமைப்பால் கண்டறிய முடியாத ஒரு வழியில் இதை உடைக்கிறது. பதிப்பு 7 இந்தக் கேள்வியை மேலும் சுருக்குகிறது: ஒரு ஒற்றை மில்லிசெகண்டிற்குள் ஒரு உருவாக்கி தன்னையே மீண்டும் உருவாக்கிக் கொள்ளவே முடியாது, ஏனெனில் கவுண்டர் பகடையை உருட்டுவதற்குப் பதிலாக அதிகரிக்கிறது, மேலும் தனித்தனி உருவாக்கிகளுக்கு குறுக்கே 62 சமவாய்ப்பு பிட்கள் அந்த வேலையைச் செய்கின்றன.

ஒரு UUID ஒரு அடையாளங்காட்டியே தவிர, கடவுச்சொல் அல்ல. பதிப்பு 4 கணிக்க முடியாதது, இது மக்கள் அதை ஒரு ரகசியமாக (secret) நடத்தத் தூண்டுகிறது — கடவுச்சொல்-மீட்டமைப்பு இணைப்பு (password-reset link), யூகிக்க முடியாத URL, அமர்வு டோக்கன் (session token), API திறவுகோல் என. கணிக்க முடியாத தன்மை (unpredictability) உண்மையானது, ஆனால் ரகசியம் என்பது ஒரு மதிப்பு எவ்வாறு கையாளப்படுகிறது என்பதன் பண்பாகும், மற்றும் அடையாளங்காட்டிகள் திட்டமிட்டே கவனக்குறைவாகக் கையாளப்படுகின்றன: அவை URL-களில் உள்ளன, அவை உலாவி வரலாறு, சேவையகப் பதிவேடுகள் (server logs), பரிந்துரையாளர் தலைப்புகள் (referrer headers) மற்றும் பகுப்பாய்வுகளில் (analytics) வந்தடைகின்றன, மேலும் அரட்டைச் செய்திகளில் ஒட்டப்படுகின்றன. மற்ற பதிப்புகள் இன்னும் மோசமான தேர்வுகளாகும். பதிப்பு 1 மற்றும் பதிப்பு 7 ஆகிய இரண்டும் உருவாக்கப்பட்ட தருணத்தைக் குறியாக்கம் செய்கின்றன, எனவே இதை வைத்திருக்கும் எவருக்கும் அது எப்போது உருவாக்கப்பட்டது என்று தோராயமாகத் தெரியும், மேலும் அதனுடன் சேர்த்து உருவாக்கப்பட்ட எல்லாவற்றின் அக்கம் பக்கத்தையும் சுருக்க முடியும். பதிப்புகள் 3 மற்றும் 5 வேண்டுமென்றே உறுதியானவையாக (deterministic) உருவாக்கப்பட்டவை: ஒரு மின்னஞ்சல் முகவரியின் v5 UUID என்பது ஹாஷ் செய்யப்பட்ட ரகசியமல்ல, அது அதே முகவரியைக் கொண்ட எவரும் ஒரு வினாடியில் கணக்கிடக்கூடிய ஒரு மதிப்பாகும். ஒரு பொருளுக்குப் பெயரிட UUID-ஐப் பயன்படுத்தவும். மதிப்பு தெரியாமல் இருக்க வேண்டியிருக்கும் போது கடவுச்சொல் உருவாக்கி அல்லது ரகசியங்களுக்காக உருவாக்கப்பட்ட நூலகத்தின் (library) டோக்கனைப் பயன்படுத்தவும்.

இந்த UUID உருவாக்கியை ஏன் தேர்ந்தெடுக்க வேண்டும்?

பெயர் காலியாக உள்ளதா என்பதை எதையும் வைத்து உறுதிப்படுத்துவதற்கு முன்பாகவே, ஏதேனும் ஒன்றிற்குப் பெயரிட வேண்டியிருக்கும் இடங்களில் எல்லாம் UUID-கள் தோன்றும். பயன்பாட்டுக் குறியீடு (application code) தான் செருகவிருக்கும் (insert) வரிசைகளுக்காக (rows) இவற்றை உருவாக்குகிறது, எனவே தரவுத்தளத்தை அடையும் முன்பே அந்தப் பொருளுக்கு (object) ஒரு அடையாளம் இருக்கிறது, மற்றும் எழுதும் பணி இன்னும் நடந்து கொண்டிருக்கும் போதே கிளையன்ட் (client) அதைக் குறிப்பிட முடியும். பகிரப்பட்ட அமைப்புகள் (distributed systems) இவற்றின் மீது இன்னும் அதிகமாகச் சாய்ந்துள்ளன: ஒரே அட்டவணையில் (table) எழுதும் பல சேவைகள், விமானத்தில் ஆஃப்லைனில் பதிவுகளை உருவாக்கும் மொபைல் கிளையன்ட், ஏற்கனவே செயலாக்கப்பட்ட செய்தியை அடையாளம் காண வேண்டிய ஒரு வரிசை (queue) — இவற்றில் எதுவும் ஒரு பகிரப்பட்ட கவுண்டருக்காகத் (shared counter) தங்கள் முறை வரும் வரை காத்திருக்க முடியாது. பதிப்பு 5 வேறுபட்ட ஒரு தேவையை பூர்த்தி செய்கிறது, அதாவது உங்களிடம் ஏற்கனவே உள்ள ஒன்றிலிருந்து பெறப்பட்ட நிலையான அடையாளங்காட்டியாகும்: அதே ஆவணம், அதே URL அல்லது அதே கணக்கு எப்போதும் அதே UUID-உடன் தான் இணையும், எனவே எதையும் நகலெடுக்காமல் (duplicating) ஒரு இறக்குமதியை (import) இரண்டு முறை இயக்கலாம். மற்ற இடங்களில் அவை வெறுமனே ஒரு கணினி கோரும் வடிவமைப்பாகும் — பதிவேடுகள் (logs) மற்றும் தடங்கள் (traces) வழியாகச் செல்லும் ஒரு தொடர்பு அடையாளங்காட்டி, ஆயிரம் பயனர்களின் பதிவேற்றங்கள் ஒரே பக்கெட்டில் (bucket) வந்து சேரும் போது முரண்படாத ஒரு கோப்புப் பெயர், ஒரு Windows பதிவேட்டுத் திறவுகோல் (registry key), உண்மையான தரவைப் போலத் தோன்ற வேண்டிய ஒரு சோதனைப் பொருத்துதல் (test fixture).

சில நேர்மையான வரம்புகளைத் தெரிந்து கொள்வது மதிப்புக்குரியது. ஒரு தொகுதி என்பது ஒரு பதிப்பாகும்: 'பதிப்பு' என்பதில் உள்ள மதிப்பு அதிலுள்ள அனைத்திற்கும் பொருந்தும், எனவே v4-களின் ஒரு சுற்றும் v7-களின் ஒரு சுற்றும் இரண்டு தொகுதிகளாகும். இது ஒரு உருவாக்கி, ஆய்வாளர் அல்ல — ஒரு UUID-இன் பதிப்பையோ அல்லது அதன் நேர முத்திரையையோ திரும்பப் படிக்க அதை இங்கே ஒட்டுவது இந்தப் பக்கம் செய்யும் காரியம் அல்ல. 'கோப்பில் சேமி' என்பது CSV அல்லது JSON-க்கு பதிலாக ஒரு வெற்று உரை கோப்பை (plain text file) எழுதுகிறது. பதிப்பு 7 அது எப்போது உருவாக்கப்பட்டது என்பதை வெளிப்படையாக மில்லிசெகண்ட் வரை வெளிப்படுத்துகிறது, இது ஒரு குறைபாடு அல்ல மாறாக உண்மையான பரிமாற்றமாகும், மற்றும் பதிப்பு 1 நேரத்தை அதே வழியிலேயே கசியவிடுகிறது; இது உங்கள் தரவுகளுக்கு ஒரு பிரச்சனையாக இருந்தால், யாரிடமும் எதையும் சொல்லாத பதிப்பாக பதிப்பு 4 உள்ளது. தரநிலையிலிருந்து வரும் இரண்டு சிறப்பு மதிப்புகள் பதிப்புகள் அல்ல, எனவே அவை 'பதிப்பு' தேர்வில் விருப்பங்களாக இல்லை, ஆனால் நீங்கள் அவற்றை இங்கிருந்து நகலெடுக்கலாம்: nil UUID, 00000000-0000-0000-0000-000000000000, மற்றும் max UUID, ffffffff-ffff-ffff-ffff-ffffffffffff. இந்தப் பக்கத்தில் உள்ள அனைத்தும் RFC 9562-ஐப் பின்பற்றுகின்றன, இது 2024-இல் RFC 4122-க்கு பதிலாக வந்த குறிப்பீடாகும் (specification), எனவே இங்கிருந்து வரும் வெளியீடானது UUID-களைக் கையாளும் எந்தவொரு நூலகம் (library), தரவுத்தளம் அல்லது API-யாலும் ஏற்றுக்கொள்ளப்படுகிறது. அந்த வரம்புகளுக்குள் உத்தரவாதம் வலுவானது: ஒவ்வொரு அடையாளங்காட்டியும் தரநிலைக்கு ஏற்ப, குறியாக்கவியல் ரீதியாக பாதுகாப்பான சமவாய்ப்பிலிருந்து, உங்கள் சொந்த இயந்திரத்திலேயே உருவாக்கப்படுகிறது, வேறு யாரும் அதை ஒருபோதும் பார்ப்பதில்லை.

FAQ

ஒரு UUID-ஐ நான் எவ்வாறு உருவாக்குவது?

'பதிப்பு' என்பதில் ஒரு பதிப்பைத் தேர்ந்தெடுக்கவும், 'தேர்வுகளின் எண்ணிக்கை' என்பதில் உங்களுக்கு எத்தனை தேவை என்பதை அமைக்கவும், பின்னர் 'உருவாக்கு' என்பதை அழுத்தவும். பெரும்பாலான திட்டங்கள் விரும்பும் ஒற்றை பதிப்பு 4 அடையாளங்காட்டியுடன் பக்கம் திறக்கிறது, எனவே ஒரு சாதாரண UUID ஒரு கிளிக் தூரத்தில் உள்ளது. ஒவ்வொரு மதிப்பும் அதன் சொந்த நகலெடுக்கும் பொத்தானுடன் தோன்றும், மேலும் 'அனைத்தையும் நகலெடு' முழுத் தொகுதியையும் ஒரே நேரத்தில் எடுத்துக்கொள்கிறது.

UUID v4 மற்றும் v7 ஆகியவற்றுக்கு இடையேயான வித்தியாசம் என்ன?

பதிப்பு 4 என்பது எந்தவொரு அமைப்பும் இல்லாத 122 சமவாய்ப்பு பிட்கள் (random bits) ஆகும், எனவே அவற்றில் இரண்டுக்கு ஒன்றுக்கொன்று எந்தத் தொடர்பும் இல்லை. பதிப்பு 7 முதல் 48 பிட்களை அது உருவாக்கப்பட்ட மில்லிசெகண்டிற்காகச் செலவிடுகிறது, ஒரு கவுண்டரையும் (counter) 62 சமவாய்ப்பு பிட்களையும் சேர்க்கிறது, மேலும் இதன் காரணமாக வரிசைப்படுத்தக்கூடியதாக (sortable) உள்ளது: ஒரு தொகுதி அது உருவாக்கப்பட்ட வரிசையிலேயே வெளிவருகிறது. ஒரு அடையாளங்காட்டி தனித்துவமாக மட்டுமே இருக்க வேண்டும் எனும் போது v4-ஐப் பயன்படுத்தவும், அது தரவுத்தளத் திறவுகோலாகவும் (database key) இருக்கும் போது v7-ஐப் பயன்படுத்தவும்.

நான் எந்த UUID பதிப்பைப் பயன்படுத்த வேண்டும்?

மற்றொன்றைத் தேர்ந்தெடுக்க உங்களிடம் காரணம் இல்லையென்றால் பதிப்பு 4-ஐப் பயன்படுத்தவும். அடையாளங்காட்டி முதன்மைத் திறவுகோலாகவும் (primary key), செருகும் செயல்பாடு (insert performance) முக்கியமானதாகவும் இருந்தால் பதிப்பு 7-ஐத் தேர்வு செய்யவும், ஒரே உள்ளீடு எப்போதுமே அதே அடையாளங்காட்டியையே உருவாக்க வேண்டும் என்றால் பதிப்பு 5-ஐத் தேர்வு செய்யவும், நீங்கள் தொடர்பு கொள்ள வேண்டிய ஒரு கணினி அதைக் குறிப்பாகக் கேட்டால் மட்டுமே பதிப்பு 1-ஐத் தேர்வு செய்யவும். பதிப்பு 3 என்பது SHA-1-க்கு பதிலாக MD5-ஐக் கொண்ட பதிப்பு 5 ஆகும், அது இணக்கத்தன்மைக்காக (compatibility) உள்ளது.

உருவாக்கப்பட்ட UUID-கள் உண்மையிலேயே சமவாய்ப்பானவை மற்றும் பாதுகாப்பானவையா?

சமவாய்ப்பு தன்மை குறியாக்கவியல் ரீதியாகப் (cryptographically) பாதுகாப்பானது: இது Math.random() என்பதிலிருந்து வராமல், உங்கள் உலாவியின் Web Crypto API-இலிருந்து crypto.randomUUID() அல்லது crypto.getRandomValues() வழியாக வருகிறது. யூகிக்க முடியாதது என்ற பொருளில் பாதுகாப்பானது என்பது ரகசியமானது என்ற பொருளில் பாதுகாப்பானது என்பதிலிருந்து வேறுபட்ட கேள்வியாகும் — UUID என்பது ஒரு அடையாளங்காட்டி, அதை கடவுச்சொல், அமர்வு டோக்கன் (session token) அல்லது API திறவுகோலாகப் பயன்படுத்தக் கூடாது.

ஒரே நேரத்தில் என்னால் பல UUID-களை உருவாக்க முடியுமா?

ஆம், ஒரே நேரத்தில் 1000 வரை உருவாக்க முடியும். 'தேர்வுகளின் எண்ணிக்கை' என்பதை அமைத்து 'உருவாக்கு' என்பதை அழுத்தவும்; ஐம்பது மதிப்புகளுக்குப் பிறகு முடிவு நீண்ட வரிசைகளின் பட்டியலாக இல்லாமல், உருட்டக்கூடிய (scrollable) ஒற்றைத் தொகுதியாக மாறுகிறது. 'அனைத்தையும் நகலெடு' மற்றும் 'கோப்பில் சேமி' ஆகியவை 'நகலெடுக்கும் வடிவம்' கூறுவது போல் இணைக்கப்பட்ட முழுத் தொகுதியையும் எடுக்கின்றன — ஒரு வரிக்கு ஒன்றாக, காற்புள்ளியால் பிரிக்கப்பட்டு, அல்லது ஒரு வரிசையில் (array) ஒட்டுவதற்காக (paste) மேற்கோள் குறிகளுக்குள்.

v3 மற்றும் v5 எனக்கு ஒவ்வொரு முறையும் ஏன் ஒரே UUID-ஐத் தருகின்றன?

அதற்காகவே அவை உள்ளன. பதிப்புகள் 3 மற்றும் 5 உறுதியானவை (deterministic): நீங்கள் கொடுக்கும் பெயரிடைவெளி (namespace) மற்றும் பெயரை அவை ஹாஷ் செய்கின்றன, எனவே ஒரே மாதிரியான உள்ளீடுகள் எந்த இயந்திரத்திலும் எந்த மொழியிலும் எப்போதுமே ஒரே மாதிரியான அடையாளங்காட்டியையே உருவாக்குகின்றன. இது உங்களிடம் ஏற்கனவே உள்ள ஒன்றிலிருந்து நிலையான அடையாளங்காட்டியப் பெறுவதற்கு அவற்றைப் பயனுள்ளதாக ஆக்குகிறது, மேலும் அவற்றைத் தேர்ந்தெடுக்கும்போது 'தேர்வுகளின் எண்ணிக்கை' மறைந்து போவதற்கும் இதுவே காரணமாகும்.

பெயரிடைவெளி (Namespace) மற்றும் பெயர் (Name) என்றால் என்ன, நான் எந்தப் பெயரிடைவெளியைத் தேர்வு செய்ய வேண்டும்?

அவை பதிப்பு 3 அல்லது பதிப்பு 5 UUID கணக்கிடப்படும் இரண்டு உள்ளீடுகளாகும். 'பெயரிடைவெளி' பெயர் எவ்வகையானது என்பதைக் கூறுகிறது — ஹோஸ்ட் பெயர்களுக்கான (host names) DNS, முகவரிகளுக்கான URL, அந்த டைரக்டரி திட்டங்களுக்கான (directory schemes) OID மற்றும் X.500, அல்லது உங்களுக்கென சொந்தமாக பெயரிடைவெளி UUID ஒன்றை வழங்க விரும்பினால் 'தனிப்பயன்' (Custom) — இது வழக்கமாக ஒரு பயன்பாட்டிற்குள் (application) தேர்ந்தெடுக்கப்படும் ஒரு தேர்வாகும். 'பெயர்' என்பது அந்த சரமே (string) ஆகும். வெவ்வேறு பெயரிடைவெளிகள் ஒரே பெயருக்கு முற்றிலும் மாறுபட்ட முடிவுகளைத் தருகின்றன, அவை இருப்பதன் நோக்கமும் அதுவே.

தரவுத்தளத்தின் முதன்மைத் திறவுகோலுக்கு v4-ஐ விட UUID v7 ஏன் சிறந்தது?

குறியீட்டில் (index) மதிப்புகள் எங்கு இறங்குகின்றன என்பதன் காரணத்தினால்தான். குறியீடு வரிசைப்படுத்தப்பட்ட (sorted) முறையில் வைக்கப்பட்டிருக்கும், மேலும் ஒரு சமவாய்ப்பான v4 திறவுகோல் அதில் எங்கு வேண்டுமானாலும் இறங்கும், எனவே செருகல்கள் (inserts) மரம் (tree) முழுவதும் பக்கங்களைப் பிரிக்கின்றன (page split) மற்றும் நினைவகத்தில் வைக்கப்பட்டுள்ள பகுதிகள் அடுத்ததாகத் தேவைப்படும் பகுதிகளாக இருப்பது அரிது. ஒரு v7 திறவுகோல் தற்போதைய மில்லிசெகண்டுடன் தொடங்குகிறது, எனவே தொடர்ச்சியான செருகல்கள் குறியீட்டின் முடிவில் ஒன்றாக இறங்குகின்றன, இது ஒரு தொடர்ச்சியான முழு எண் திறவுகோல் (sequential integer key) எவ்வாறு செயல்படுமோ அவ்வாறே செயல்படுகிறது — அதே சமயம் எந்தவொரு சேவையையும் மைய கவுண்டரைக் கேட்காமலேயே அடையாளங்காட்டி ஒன்றை உருவாக்க அனுமதிக்கிறது.

இரண்டு UUID-கள் எப்போதாவது ஒரே மாதிரியாக இருக்க முடியுமா?

கோட்பாட்டின்படி ஆம், நடைமுறையில் இல்லை, இதில் எது சரி என்பதைத் தெரிந்து கொள்வது மதிப்புக்குரியது. தனித்துவத்தை (uniqueness) எதுவும் சரிபார்ப்பதில்லை: 2^122 சாத்தியமான பதிப்பு 4 மதிப்புகள் உள்ளன, அதாவது சுமார் 5.3 அன்டெசிலியன் (5.3 × 10^36), மேலும் ஒரே ஒரு முரண்பாடு (collision) ஏற்படும் வாய்ப்பு 50% இருப்பதற்கு முன்பாக தோராயமாக 2.7 குயின்டிலியன் (2.7 × 10^18) UUID-கள் உங்களுக்குத் தேவைப்படும் — இது 86 ஆண்டுகளுக்கு வினாடிக்கு ஒரு பில்லியன் ஆகும். உத்தரவாதமானது முழுமையானது என்பதை விட புள்ளிவிவர ரீதியானது (statistical), மற்றும் அது அடியில் உள்ள சமவாய்ப்பு (randomness) உண்மையானதாக இருப்பதைப் பொறுத்தது, இதனால்தான் இந்த உருவாக்கி ஒரு சாதாரண போலி சமவாய்ப்புச் செயல்பாட்டிற்கு (pseudo-random function) பதிலாக Web Crypto API-ஐப் பயன்படுத்துகிறது.

ஒரு UUID-ஐ நான் கடவுச்சொல், API திறவுகோல் அல்லது அமர்வு டோக்கனாகப் (session token) பயன்படுத்தலாமா?

முடியாது, இதுதான் மிகவும் அதிக விலைகொடுக்க வைக்கும் பிழையாகும். பதிப்பு 4 UUID கணிக்க முடியாதது, ஆனால் அடையாளங்காட்டிகள் பொதுவானவைகளாகவே கருதப்பட்டு கையாளப்படுகின்றன: அவை URL-கள், உலாவி வரலாறு, சேவையகப் பதிவேடுகள் (server logs), பரிந்துரையாளர் தலைப்புகள் (referrer headers) மற்றும் பகுப்பாய்வுகளில் (analytics) முடிவடைகின்றன. பதிப்புகள் 1 மற்றும் 7 கூடுதலாக அவை எப்போது உருவாக்கப்பட்டன என்பதை வெளிப்படுத்துகின்றன, மேலும் பதிப்புகள் 3 மற்றும் 5-ஐ உள்ளீடுகளை அறிந்த எவராலும் மீண்டும் கணக்கிட (recomputed) முடியும். ரகசியமாக இருக்க வேண்டிய எதற்கும், கடவுச்சொல் உருவாக்கி அல்லது ரகசியங்களுக்காக உருவாக்கப்பட்ட நூலகத்தின் (library) டோக்கனைப் பயன்படுத்தவும்.

UUID v7 தான் உருவாக்கப்பட்ட நேரத்தை வெளிப்படுத்துகிறதா?

ஆம், மில்லிசெகண்ட் வரை, இது ஒரு தவறால் அல்ல, வடிவமைப்பாலேயே (design) நடக்கிறது — நேர முத்திரையே (timestamp) v7-ஐ வரிசைப்படுத்தக்கூடியதாக (sortable) ஆக்குகிறது. முடிவின் கீழேயுள்ள வரி, தொகுதியின் முதல் மதிப்பில் குறியாக்கம் (encode) செய்யப்பட்ட நேரத்தை உங்களுக்குக் காட்டுகிறது, எனவே எது வெளிப்படுத்தப்படுகிறது என்பதை உங்களால் சரியாகப் பார்க்க முடியும். பதிப்பு 1-ம் நேர முத்திரையைக் கொண்டுள்ளது. உருவாக்கப்படும் நேரம் என்பது நீங்கள் வெளியிட விரும்பாத ஒன்று என்றால், பதிப்பு 4 எவ்வித நேரத்தையும் கொண்டிருக்காத பதிப்பாகும்.

UUID v1 எனது MAC முகவரியை அம்பலப்படுத்துகிறதா?

இங்கு இல்லை. அசல் திட்டமானது இயந்திரத்தின் நெட்வொர்க் கார்டு முகவரியை நோட் புலமாகப் (node field) பயன்படுத்தியது, இதிலிருந்துதான் v1-இன் நற்பெயர் வருகிறது, ஆனால் தரநிலையானது (standard) மல்டிகாஸ்ட் பிட் குறிக்கப்பட்ட ஒரு சமவாய்ப்பு நோட் அடையாளங்காட்டியையும் அனுமதிக்கிறது, இந்த உருவாக்கி அதையே உருவாக்குகிறது. உங்கள் வன்பொருள் முகவரி (hardware address) ஒருபோதும் படிக்கப்படுவதில்லை மற்றும் ஒருபோதும் வெளியீட்டில் தோன்றுவதில்லை.

பெரிய எழுத்துகள், நடுக்கோடுகள் இன்றி, சுருள் அடைப்புக்குறிகள் மற்றும் urn:uuid: என்பவை எதை மாற்றுகின்றன?

விளக்கக்காட்சியை மட்டுமே — அடியில் உள்ள 128 பிட்கள் ஒவ்வொரு வடிவத்திலும் ஒரே மாதிரியானவை. 'பெரிய எழுத்துகள்' ஹெக்ஸ் (hex) இலக்கங்களை பெரிய எழுத்துக்களில் அச்சிடுகிறது, 'நடுக்கோடுகள் இன்றி' 32-எழுத்துருக்கள் கொண்ட சுருக்கமான பதிப்பைத் தருகிறது, 'சுருள் அடைப்புக்குறிகள்' Windows மற்றும் .NET ஆகியவை ஒரு GUID-ஐ எழுதும் விதமாக மதிப்பை { }-க்குள் சுற்றுகிறது, மற்றும் urn:uuid: என்பது இதை ஒரு முறையான URN ஆக மாற்றும் முன்னொட்டைச் (prefix) சேர்க்கிறது. urn:uuid: இயக்கத்தில் இருக்கும் போது மற்ற இரண்டையும் அணைக்கிறது, ஏனெனில் தரநிலை (standard) சரியாக ஒரே ஒரு URN வடிவத்தை வரையறுக்கிறது மற்றும் அது நடுக்கோடுகளுடன் கூடிய நியமன (canonical) வடிவமாகும்.