എന്താണ് ULID, ഈ പേജ് എന്തിന് വ്യത്യസ്തമാണ്?
ഈ പേജ് ULID (Universally Unique Lexicographically Sortable Identifier) ഫോർമാറ്റിൽ ഐഡന്റിഫയറുകൾ സൃഷ്ടിക്കുന്നതിനുള്ള ഒരു ലളിതമായ ബ്രൗസർ അധിഷ്ഠിത ടൂളാണ്. നിങ്ങൾക്ക് 1 മുതൽ 100 വരെ എത്ര ഐഡികൾ വേണമെന്ന് തിരഞ്ഞെടുക്കാം, അതിനനുസരിച്ച് 26 അക്ഷരങ്ങളുള്ള കേസ്-ഇൻസെൻസിറ്റീവ് സ്ട്രിംഗുകളുടെ ഒരു ലിസ്റ്റ് ലഭിക്കും. ഈ പേജിനെ മറ്റ് ഐഡി ജനറേറ്റർ പേജുകളിൽ നിന്ന് വ്യത്യസ്തമാക്കുന്നത് ULID-ന്റെ അതുല്യമായ സവിശേഷതകളാണ്.
UUID-കളെ അപേക്ഷിച്ച് ULID-കൾക്ക് 26 അക്ഷരങ്ങൾ മാത്രമേയുള്ളൂ (UUID-ക്ക് 36 അക്ഷരങ്ങൾ). അവ ഹൈഫണുകൾ ഇല്ലാത്തതും കേസ്-ഇൻസെൻസിറ്റീവ് ആണ്. ആദ്യത്തെ 10 അക്ഷരങ്ങൾ മില്ലിസെക്കൻഡ് കൃത്യതയുള്ള ഒരു ടൈംസ്റ്റാമ്പ് എൻകോഡ് ചെയ്യുന്നു, അതിനാൽ ULID-കൾ ക്രിയേഷൻ സമയം അനുസരിച്ച് ലെക്സിക്കോഗ്രാഫിക്കായി സോർട്ട് ചെയ്യാവുന്നതാണ്. അവ URL-സേഫും ആണ് — എസ്കേപ്പിംഗ് ആവശ്യമില്ല. ഈ പേജിൽ അപ്പർകേസ് അല്ലെങ്കിൽ ഹൈഫൺ ടോഗിളുകൾ ഇല്ല, കാരണം ULID ഫോർമാറ്റ് അന്തർലീനമായി തന്നെ ഹൈഫണുകളില്ലാത്തതും കേസ്-ഇൻസെൻസിറ്റീവുമാണ്. റാൻഡം ഘടകത്തിന് 16 അക്ഷരങ്ങൾ (80 ബിറ്റുകൾ) ഉണ്ട്, മൊത്തം 128 ബിറ്റുകളിൽ ബാക്കി ഭാഗം.
നിങ്ങൾ ഫോർമാറ്റ് സെലക്ഷനിൽ ULID തിരഞ്ഞെടുക്കുമ്പോൾ, കൗണ്ട് 1-നും 100-നും ഇടയിലുള്ള ഒരു പൂർണ്ണസംഖ്യ ആയിരിക്കണം. ഔട്ട്പുട്ട് ആവശ്യപ്പെട്ട എണ്ണം ULID സ്ട്രിംഗുകളും എത്ര ജനറേറ്റ് ചെയ്തു എന്നതിന്റെ എണ്ണവുമാണ്. സ്റ്റാറ്റസ് സന്ദേശങ്ങൾ "Ready.", "Generated." എന്നിവയും "Copied all!" (മുഴുവൻ ലിസ്റ്റും കോപ്പി ചെയ്യുമ്പോൾ) എന്നിവയാണ്.
ULID-ന്റെ ആന്തരിക ഘടന: ടൈംസ്റ്റാമ്പും റാൻഡം ഭാഗവും
ULID-യുടെ 128 ബിറ്റുകൾ രണ്ട് പ്രധാന ഭാഗങ്ങളായി വിഭജിച്ചിരിക്കുന്നു:
- ടൈംസ്റ്റാമ്പ് (48 ബിറ്റുകൾ): ആദ്യത്തെ 10 അക്ഷരങ്ങൾ മില്ലിസെക്കൻഡ് കൃത്യതയുള്ള സമയം എൻകോഡ് ചെയ്യുന്നു. ഇത് ക്രിയേഷൻ സമയത്തെ അടിസ്ഥാനമാക്കിയുള്ള ലെക്സിക്കോഗ്രാഫിക് സോർട്ടിംഗ് സാധ്യമാക്കുന്നു. 48 ബിറ്റുകൾ ഏകദേശം 8,925 വർഷം വരെയുള്ള (2^48 മില്ലിസെക്കൻഡുകൾ) മില്ലിസെക്കൻഡുകളെ പ്രതിനിധീകരിക്കുന്നു.
- റാൻഡം ഘടകം (80 ബിറ്റുകൾ): ബാക്കിയുള്ള 16 അക്ഷരങ്ങൾ 80 ബിറ്റുകൾ ഉൾക്കൊള്ളുന്നു, അവ ശക്തമായ ബ്രൗസർ റാൻഡംനസ് (crypto.getRandomValues() വഴി) ഉപയോഗിച്ച് സൃഷ്ടിക്കപ്പെടുന്നു. ഈ ഭാഗമാണ് ഓരോ ULID-നും അദ്വിതീയത നൽകുന്നത്, ഒരേ മില്ലിസെക്കൻഡിൽ പോലും വ്യത്യസ്ത മൂല്യങ്ങൾ ഉൽപാദിപ്പിക്കുന്നു.
എൻകോഡിംഗ് ഉപയോഗിക്കുന്നത് ക്രോക്ക്ഫോർഡിന്റെ ബേസ്32 ആൽഫബെറ്റാണ് (0-9, A-Z, I, L, O, U എന്നിവ ഒഴികെ). ഇത് അവ്യക്തമായ അക്ഷരങ്ങൾ ഒഴിവാക്കുകയും ULID-കളെ കേസ്-ഇൻസെൻസിറ്റീവ് ആക്കുകയും ചെയ്യുന്നു. അതായത്, "a" എന്നതും "A" എന്നതും ഒരേ മൂല്യത്തെയാണ് പ്രതിനിധീകരിക്കുന്നത് — പക്ഷേ ഔട്ട്പുട്ട് സാധാരണയായി അപ്പർകേസിലാണ് കാണിക്കുന്നത്. ഹൈഫണുകളൊന്നുമില്ല, അതിനാൽ ULID-കൾ 26 അക്ഷരങ്ങളുടെ ഒറ്റ ബ്ലോക്കായിരിക്കും.
UUID v4, v7 എന്നിവയുമായുള്ള താരതമ്യം
| സവിശേഷത | ULID | UUID v4 | UUID v7 |
|---|---|---|---|
| നീളം | 26 അക്ഷരങ്ങൾ | 36 അക്ഷരങ്ങൾ (32 + 4 ഹൈഫണുകൾ) | 36 അക്ഷരങ്ങൾ |
| ഹൈഫണുകൾ | ഇല്ല | ഉണ്ട് (4 എണ്ണം) | ഉണ്ട് |
| കേസ്-ഇൻസെൻസിറ്റീവ് | അതെ (ബേസ്32 കാരണം) | സാധാരണ സ്വീകരിച്ചിട്ടില്ല | സാധാരണ സ്വീകരിച്ചിട്ടില്ല |
| ടൈം സോർട്ടബിൾ | അതെ (മില്ലിസെക്കൻഡ്) | ഇല്ല (പൂർണ്ണമായും റാൻഡം) | അതെ (മില്ലിസെക്കൻഡ്) |
| URL-സേഫ് | അതെ (എസ്കേപ്പിംഗ് ആവശ്യമില്ല) | അതെ (ഹൈഫണുകൾ സുരക്ഷിതം) | അതെ |
| ബിറ്റ് വലുപ്പം | 128 | 128 | 128 |
| ടൈംസ്റ്റാമ്പ് ബിറ്റുകൾ | 48 | 0 | 48 (മില്ലിസെക്കൻഡ്) |
| റാൻഡം ബിറ്റുകൾ | 80 | 122 | 74 |
UUID v4 പൂർണ്ണമായും റാൻഡം ആണ്, അതിനാൽ ഇത് സോർട്ട് ചെയ്യാനോ ക്രിയേഷൻ സമയവുമായി ബന്ധിപ്പിക്കാനോ കഴിയില്ല. UUID v7 ന് സമാനമായ ടൈംസ്റ്റാമ്പ് രൂപകൽപ്പനയുണ്ട്, പക്ഷേ അതിന് 36 അക്ഷരങ്ങളും ഹൈഫണുകളും ആവശ്യമാണ്. ULID-ന്റെ 26 അക്ഷരങ്ങൾ ഡാറ്റാബേസ് കോളങ്ങളിലും URL-കളിലും കുറച്ച് സ്ഥലമെടുക്കുന്നു. ഇത് വായിക്കാനും എഴുതാനും എളുപ്പമാണ് — പ്രത്യേകിച്ച് മനുഷ്യർ കൈകാര്യം ചെയ്യുമ്പോൾ.
ULID-കൾക്ക് ഹൈഫണുകൾ ഇല്ലാത്തതിനാൽ, അവ കോപ്പി ചെയ്യുമ്പോഴോ പകർത്തുമ്പോഴോ ഹൈഫൺ വിഭജനം പോലുള്ള പ്രശ്നങ്ങൾ ഉണ്ടാകില്ല. കേസ്-ഇൻസെൻസിറ്റിവിറ്റി ഡബിൾ-എന്റർ പിശകുകൾ കുറയ്ക്കുന്നു — "a" എന്നത് "A" ആയി തെറ്റിദ്ധരിക്കപ്പെടില്ല.
ക്രോക്ക്ഫോർഡ് ബേസ്32 എൻകോഡിംഗും URL സുരക്ഷയും
ക്രോക്ക്ഫോർഡിന്റെ ബേസ32-ൽ 32 അക്ഷരങ്ങളുണ്ട്: 0-9, A-Z എന്നീ 26 അക്ഷരങ്ങളിൽ നിന്ന് I, L, O, U എന്നിവ ഒഴിവാക്കിയിരിക്കുന്നു. എന്തുകൊണ്ട്? കാരണം I എന്നത് 1-ഉം, L എന്നത് 1-ഉം, O എന്നത് 0-ഉം, U എന്നത് V-യുമായി ആശയക്കുഴപ്പത്തിലാക്കാൻ സാധ്യതയുണ്ട്. അതിനാൽ 1, I, L എന്നിവ ഒഴിവാക്കിയിരിക്കുന്നു. അതേപോലെ 0, O എന്നിവയും. U ഒഴിവാക്കിയിരിക്കുന്നു, കാരണം അത് V-ക്ക് അടുത്താണ്, എന്നാൽ ഔദ്യോഗിക കാരണത്തെക്കുറിച്ച് കൃത്യമായി അറിയില്ല.
എൻകോഡിംഗ് ലോവർകേസും അപ്പർകേസും ഒരേ മൂല്യമായി കണക്കാക്കുന്നു. അതായത്, "01BX5ZZKBKACTAV9WEVGEMMVS4" എന്ന ULID, "01bx5zzkbkactav9wevgemmys4" എന്നതിന് തുല്യമാണ്. ഇത് പ്രായോഗികമായി ഉപയോഗപ്രദമാണ് — ഉപയോക്താക്കൾ ആകസ്മികമായി കേസ് മാറ്റിയാലും ഡാറ്റാബേസ് തിരയലിൽ പ്രശ്നമുണ്ടാകില്ല.
URL സുരക്ഷയുടെ കാര്യത്തിൽ, ULID-കളിലെ എല്ലാ അക്ഷരങ്ങളും RFC 3986 പ്രകാരം "unreserved" വിഭാഗത്തിൽ പെടുന്നു. അതിനാൽ URL-കളിൽ percent-encoding ആവശ്യമില്ല. ഇത് API എൻഡ്പോയിന്റുകളിലും വെബ്സൈറ്റ് URL-കളിലും നേരിട്ട് ഉപയോഗിക്കാൻ സുരക്ഷിതമാണ്.
ആപ്ലിക്കേഷൻ: ഡാറ്റാബേസ് ഇൻഡക്സിംഗും ഡിസ്ട്രിബ്യൂട്ടഡ് സിസ്റ്റങ്ങളും
ULID-കളുടെ ഏറ്റവും പ്രധാനപ്പെട്ട ഗുണം ലെക്സിക്കോഗ്രാഫിക് സോർട്ടിംഗ് ആണ്. ഇത് ബി-ട്രീ ഇൻഡക്സുകളിൽ (B-tree indexes) നോൺ-മോണോടോണിക് ഡാറ്റയേക്കാൾ വളരെ കാര്യക്ഷമമാണ്. UUID v4-കൾ റാൻഡം ആയതിനാൽ അവ B-tree-യിൽ ഏകദേശം ഒരേ സ്ഥലങ്ങളിൽ ചേർക്കപ്പെടുന്നു, ഇത് പേജ് സ്പ്ലിറ്റുകൾ ഉണ്ടാക്കി പ്രകടനത്തെ ബാധിക്കുന്നു. ULID-കൾ, ടൈംസ്റ്റാമ്പ് അടിസ്ഥാനമാക്കിയുള്ളതിനാൽ, ഏകദേശം മോണോടോണിക്കലി വർദ്ധിക്കുന്നു — പുതിയ ഐഡികൾ ഏകദേശം ലിസ്റ്റിന്റെ അവസാനത്തിലാണ് ചേർക്കപ്പെടുന്നത്.
ഡിസ്ട്രിബ്യൂട്ടഡ് സിസ്റ്റങ്ങളിൽ, ഓരോ നോഡും ഒരേ സമയം ULID-കൾ സൃഷ്ടിക്കുമ്പോൾ, ടൈംസ്റ്റാമ്പ് ആദ്യ 10 അക്ഷരങ്ങളിൽ ഉള്ളതിനാൽ, വ്യത്യസ്ത നോഡുകളിൽ സൃഷ്ടിച്ച ULID-കൾ അവയുടെ ക്രിയേഷൻ സമയം അനുസരിച്ച് ഏകദേശം സോർട്ട് ചെയ്യാവുന്നതാണ്. എന്നിരുന്നാലും, ഒരേ മില്ലിസെക്കൻഡിൽ ഒന്നിലധികം ULID-കൾ സൃഷ്ടിക്കപ്പെടുകയാണെങ്കിൽ, റാൻഡം ഭാഗം മാത്രമാണ് ഓർഡർ നിർണ്ണയിക്കുന്നത്. അതിനാൽ, ഒരേ മില്ലിസെക്കൻഡിലെ ULID-കൾക്കിടയിൽ കൃത്യമായ ടൈം-ഓർഡർ ഉറപ്പില്ല — പക്ഷേ ഇത് സാധാരണ ഉപയോഗത്തിൽ പ്രശ്നമാകാറില്ല.
ULID-കൾ പ്രാദേശികമായി ബ്രൗസറിൽ ജനറേറ്റ് ചെയ്യപ്പെടുന്നു — crypto.getRandomValues() ഉപയോഗിച്ച്. സെർവറിലേക്ക് ഒന്നും അയയ്ക്കില്ല. ഇത് സ്വകാര്യതയും വേഗതയും ഉറപ്പാക്കുന്നു. ഫോറമുകൾ, ഓർഡർ ട്രാക്കിംഗ്, API കീകൾ എന്നിവയ്ക്കായി ആപ്ലിക്കേഷനുകളിൽ ഇത് ഉപയോഗിക്കാം.
ഉപയോഗ നിയമങ്ങൾ, എഡ്ജ് കേസുകൾ, പേജ് ഫീച്ചറുകൾ
ജനറേഷൻ ചട്ടങ്ങൾ
- കൗണ്ട്: 1 മുതൽ 100 വരെ. ഇതിന് പുറത്തുള്ള മൂല്യങ്ങൾ സ്വീകരിക്കില്ല.
- ഫോർമാറ്റ്: ULID തിരഞ്ഞെടുക്കുമ്പോൾ അപ്പർകേസ്/ലോവർകേസ് ടോഗിളുകളോ ഹൈഫൺ ഓപ്ഷനുകളോ ഇല്ല — ULID ന് അവ ബാധകമല്ല.
- പുനരുല്പാദനം: ഫോർമാറ്റോ കൗണ്ടോ മാറ്റിയാൽ ലിസ്റ്റ് പുതുക്കപ്പെടും.
- കോപ്പി ചെയ്യൽ: ഓരോ ULID-നും ക്ലിക്ക് ചെയ്യാവുന്ന ബട്ടൺ ഉണ്ട് — അത് വ്യക്തിഗതമായി ക്ലിപ്പ്ബോർഡിലേക്ക് കോപ്പി ചെയ്യും. "Copied all!" സന്ദേശം ദൃശ്യമാകുന്നത് മുഴുവൻ ലിസ്റ്റും ഒരുമിച്ച് കോപ്പി ചെയ്യുമ്പോൾ മാത്രമാണ്.
എഡ്ജ് കേസുകൾ
- ഒരേ മില്ലിസെക്കൻഡിൽ ഒന്നിലധികം ULID-കൾ: കൃത്യമായ ടൈം-ഓർഡർ ഉറപ്പില്ല. റാൻഡം ഭാഗമാണ് ഓർഡർ നിർണ്ണയിക്കുന്നത്.
- കോളിഷൻ പ്രോബബിലിറ്റി: 80-ബിറ്റ് റാൻഡം ഭാഗം ഉള്ളതിനാൽ, ഒരു സെക്കൻഡിൽ 1,000,000 ULID-കൾ സൃഷ്ടിക്കുമ്പോൾ പോലും കോളിഷൻ സാധ്യത വളരെ കുറവാണ്. കണക്കുകൂട്ടലുകൾ പ്രകാരം, 50% കോളിഷൻ ചാൻസ് ലഭിക്കാൻ ഏകദേശം 2^40 ULID-കൾ ആവശ്യമാണ്.
- ബ്രൗസർ പ്രവർത്തനം: എല്ലാ ജനറേഷനും ബ്രൗസറിൽ തന്നെ നടക്കുന്നു — crypto.getRandomValues() ഉപയോഗിച്ച്. ഇന്റർനെറ്റ് കണക്ഷൻ ആവശ്യമില്ല (പേജ് ലോഡ് ചെയ്ത ശേഷം).
സ്റ്റാറ്റസ് സന്ദേശങ്ങൾ
- "Ready." — പേജ് തയ്യാറായിരിക്കുന്നു, ജനറേഷന് തയ്യാറാണ്.
- "Generated." — ഐഡികൾ സൃഷ്ടിക്കപ്പെട്ടു.
- "Copied all!" — മുഴുവൻ ലിസ്റ്റും ക്ലിപ്പ്ബോർഡിലേക്ക് കോപ്പി ചെയ്തു.
FAQ
1. ULID-ന് 26 അക്ഷരങ്ങൾ എന്തുകൊണ്ട്?
ULID 128 ബിറ്റുകൾ ഉപയോഗിക്കുന്നു. ക്രോക്ക്ഫോർഡ് ബേസ32 ഓരോ അക്ഷരവും 5 ബിറ്റുകളെ പ്രതിനിധീകരിക്കുന്നു (കാരണം 2^5 = 32). 128 / 5 = 25.6, അതിനാൽ 26 അക്ഷരങ്ങൾ ആവശ്യമാണ് (25-ൽ 125 ബിറ്റുകൾ മാത്രമേ ലഭിക്കൂ, 3 ബിറ്റുകൾ നഷ്ടപ്പെടും). അതിനാൽ 26 അക്ഷരങ്ങൾ 128 ബിറ്റുകളെ എൻകോഡ് ചെയ്യുന്നു (അവസാനത്തിൽ 2 ബിറ്റുകൾ അധികമായി ഉണ്ടാകാം, പക്ഷേ ഫോർമാറ്റ് അങ്ങനെയാണ്).
2. ULID-കളിൽ ഹൈഫൺ ഇടാൻ കഴിയുമോ?
ഈ പേജിൽ ഹൈഫൺ ഓപ്ഷൻ ഇല്ല. ULID ഫോർമാറ്റ് ഹൈഫണുകളില്ലാതെയാണ് നിർവചിച്ചിരിക്കുന്നത്. നിങ്ങൾക്ക് സ്വമേധയാ ഹൈഫൺ ഇടാം, പക്ഷേ അവ സ്റ്റാൻഡേർഡ് ULID-കളായി കണക്കാക്കില്ല.
3. ULID-കൾ കേസ്-സെൻസിറ്റീവ് ആണോ?
അല്ല. ക്രോക്ക്ഫോർഡ് ബേസ32 കേസ്-ഇൻസെൻസിറ്റീവ് ആണ്. എങ്കിലും ജനറേറ്റ് ചെയ്ത ULID-കൾ സാധാരണയായി അപ്പർകേസിലാണ് കാണിക്കുന്നത്. നിങ്ങൾ ലോവർകേസിലാക്കിയാലും അതേ മൂല്യം തന്നെയാണ് പ്രതിനിധീകരിക്കുന്നത്.
4. 100-ൽ കൂടുതൽ ULID-കൾ സൃഷ്ടിക്കാൻ കഴിയുമോ?
ഈ പേജിന്റെ ഇന്റർഫേസ് 1 മുതൽ 100 വരെ മാത്രമേ അനുവദിക്കൂ. കൂടുതൽ ആവശ്യമുണ്ടെങ്കിൽ, നിങ്ങൾക്ക് പേജ് വീണ്ടും ലോഡ് ചെയ്ത് പുതിയ ബാച്ച് സൃഷ്ടിക്കാം, അല്ലെങ്കിൽ മറ്റൊരു ടൂൾ ഉപയോഗിക്കാം.
5. ഈ ULID-കൾ സുരക്ഷിതമായി ജനറേറ്റ് ചെയ്യപ്പെടുന്നുണ്ടോ?
അതെ. ബ്രൗസറിൽ crypto.getRandomValues() എന്ന API ഉപയോഗിക്കുന്നു. ഇത് ക്രിപ്റ്റോഗ്രാഫിക്കലി സുരക്ഷിതമായ റാൻഡംനസ് നൽകുന്നു. ഒരു ഡാറ്റയും സെർവറിലേക്ക് അയയ്ക്കില്ല.
6. ULID-കൾ UUID-കളേക്കാൾ എങ്ങനെ വ്യത്യസ്തമാണ്?
ULID-കൾ ചെറുതാണ് (26 vs 36 അക്ഷരങ്ങൾ), ഹൈഫണുകളില്ല, കേസ്-ഇൻസെൻസിറ്റീവ് ആണ്, ടൈം-സോർട്ടബിൾ ആണ്. UUID v4 പൂർണ്ണമായും റാൻഡം ആണ്, UUID v7-നും ടൈം-ഓർഡറിംഗ് ഉണ്ടെങ്കിലും നീളം കൂടുതലും ഹൈഫണുകൾ ഉള്ളതുമാണ്. ULID-കൾ URL-സേഫും ആണ്.