UUID ਕੀ ਹੈ?
UUID (Universally Unique Identifier) ਇੱਕ 128-ਬਿੱਟ ਮੁੱਲ ਹੈ ਜੋ 550e8400-e29b-41d4-a716-446655440000 ਵਰਗੀ 36-ਅੱਖਰ ਸਤਰ ਵਜੋਂ ਦਿਖਾਇਆ ਜਾਂਦਾ ਹੈ। ਫਾਰਮੈਟ ਅਤੇ ਵਰਜ਼ਨ ਸਿਮੈਂਟਿਕਸ v1 ਤੋਂ v5 ਲਈ RFC 4122 ਅਤੇ ਨਵੇਂ v6, v7 ਅਤੇ v8 ਵਰਜ਼ਨਾਂ ਲਈ RFC 9562 ਦੁਆਰਾ ਪਰਿਭਾਸ਼ਿਤ ਕੀਤੇ ਗਏ ਹਨ। ਇਹ ਸੰਦ v4 (ਪੂਰੀ ਤਰ੍ਹਾਂ ਬੇਤਰਤੀਬਾ), v1 (ਟਾਈਮਸਟੈਂਪ ਅਤੇ ਬੇਤਰਤੀਬਾ ਨੋਡ ID) ਅਤੇ v7 (Unix-ਮਿਲੀਸਕਿੰਟ ਟਾਈਮਸਟੈਂਪ ਅਗੇਤਰ ਅਤੇ ਬੇਤਰਤੀਬਾ ਪਿਛੇਤਰ) ਬਣਾਉਂਦਾ ਹੈ — ਸਭ ਤੁਹਾਡੇ ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ, ਪਲੇਟਫਾਰਮ ਦੀ Web Crypto API ਵਰਤ ਕੇ। ਕੋਈ ਡੇਟਾ ਸਰਵਰ ਨੂੰ ਨਹੀਂ ਭੇਜਿਆ ਜਾਂਦਾ।
UUID ਪੀੜ੍ਹੀ ਕਿਵੇਂ ਕੰਮ ਕਰਦੀ ਹੈ?
ਹਰ ਵਰਜ਼ਨ ਨਿਰਣਾਇਕਤਾ, ਛਾਂਟਣਯੋਗਤਾ ਅਤੇ ਐਂਟ੍ਰੋਪੀ ਵੱਖਰੇ ਢੰਗ ਨਾਲ ਸੰਤੁਲਿਤ ਕਰਦਾ ਹੈ। ਸੰਦ ਤੁਹਾਡੀ ਚੋਣ ਦੇ ਆਧਾਰ 'ਤੇ ਸਹੀ ਐਲਗੋਰਿਦਮ ਚੁਣਦਾ ਹੈ:
- v4 (ਬੇਤਰਤੀਬਾ) ਬ੍ਰਾਊਜ਼ਰ ਦਾ
crypto.randomUUID()ਕਾਲ ਕਰਦਾ ਹੈ, ਜੋ 122 ਬਿੱਟ ਕ੍ਰਿਪਟੋਗ੍ਰਾਫਿਕ ਬੇਤਰਤੀਬਾਪਣ ਵਾਪਸ ਕਰਦਾ ਹੈ ਜਿਸ ਵਿੱਚ 6 ਨਿਸ਼ਚਿਤ ਬਿੱਟ (ਵਰਜ਼ਨ0100ਅਤੇ10ਵੇਰੀਐਂਟ) ਸਹੀ ਸਥਾਨਾਂ 'ਤੇ ਸੈੱਟ ਹੁੰਦੇ ਹਨ। ਟੱਕਰ ਖਗੋਲਵਿਗਿਆਨਕ ਤੌਰ 'ਤੇ ਅਸੰਭਾਵ ਹੈ — 50% ਸੰਭਾਵਨਾ ਨਾਲ ਇੱਕ ਡੁਪਲੀਕੇਟ ਮਾਰਨ ਲਈ ਤੁਹਾਨੂੰ ਲਗਭਗ 2.71 quintillion v4 UUIDs ਬਣਾਉਣੇ ਪੈਣਗੇ। - v1 (ਟਾਈਮਸਟੈਂਪ + ਨੋਡ) ਇੱਕ 60-ਬਿੱਟ Gregorian ਟਾਈਮਸਟੈਂਪ (1582-10-15 ਤੋਂ 100-ਨੈਨੋਸਕਿੰਟ ਟਿੱਕ)
time_low/time_mid/time_hi_and_versionਵਿੱਚ ਪੈਕ ਕਰਦਾ ਹੈ, ਵਰਜ਼ਨ ਨਿੱਬਲ0001ਸੈੱਟ ਕਰਦਾ ਹੈ, ਅਤੇ ਇੱਕ ਬੇਤਰਤੀਬਾ 48-ਬਿੱਟ ਨੋਡ ID ਵਰਤਦਾ ਹੈ। - v7 (ਛਾਂਟਣਯੋਗ ਟਾਈਮਸਟੈਂਪ), RFC 9562 §5.7 ਅਨੁਸਾਰ, 48-ਬਿੱਟ big-endian Unix-ਮਿਲੀਸਕਿੰਟ ਟਾਈਮਸਟੈਂਪ, ਫਿਰ 4-ਬਿੱਟ ਵਰਜ਼ਨ
0111, ਫਿਰ 12 ਬੇਤਰਤੀਬੇ ਬਿੱਟ, ਫਿਰ 2-ਬਿੱਟ ਵੇਰੀਐਂਟ10, ਫਿਰ 62 ਹੋਰ ਬੇਤਰਤੀਬੇ ਬਿੱਟ ਰੱਖਦਾ ਹੈ। ਕਿਉਂਕਿ ਟਾਈਮਸਟੈਂਪ ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਬਿੱਟਾਂ ਵਿੱਚ ਹੈ, v7 UUIDs ਪੈਦਾਵਾਰ ਕ੍ਰਮ ਵਿੱਚ ਲੈਕਸੀਕੋਗ੍ਰਾਫਿਕ ਛਾਂਟਦੇ ਹਨ। - ਸਾਰਾ ਬੇਤਰਤੀਬਾਪਣ
crypto.getRandomValues()ਤੋਂ ਆਉਂਦਾ ਹੈ, ਬ੍ਰਾਊਜ਼ਰ ਦਾ ਕ੍ਰਿਪਟੋਗ੍ਰਾਫਿਕ ਤੌਰ 'ਤੇ ਸੁਰੱਖਿਅਤ RNG। v1 ਅਤੇ v7 ਦੋਵੇਂ ਇੱਕ ਅੰਤਰ-ਟਿੱਕ ਮੋਨੋਟੋਨਿਕ ਗਾਰਡ ਸ਼ਾਮਲ ਕਰਦੇ ਹਨ ਤਾਂ ਜੋ ਉਸੇ ਘੜੀ ਟਿੱਕ ਦੇ ਅੰਦਰ ਦੋ ਲਗਾਤਾਰ ਕਾਲਾਂ ਵਿੱਚੋਂ ਦੂਜੀ ਫਿਰ ਵੀ ਪਹਿਲੀ ਤੋਂ ਉੱਪਰ ਛਾਂਟੀ ਜਾਵੇ — ਥੋਕ ਪੈਦਾਵਾਰ ਦੌੜਾਂ ਲਈ ਮਹੱਤਵਪੂਰਨ ਜੋ ਮਿਲੀਸਕਿੰਟ ਘੜੀ ਨਾਲ ਦੌੜ ਲਾਉਂਦੀਆਂ ਹਨ। - ਫਾਰਮੈਟ ਪਾਈਪਲਾਈਨ ਪੀੜ੍ਹੀ ਤੋਂ ਬਾਅਦ ਚੱਲਦੀ ਹੈ। ਤੁਸੀਂ ਹਾਈਫਨ ਹਟਾ ਸਕਦੇ, ਵੱਡੇ ਅੱਖਰਾਂ ਵਿੱਚ ਬਦਲ ਸਕਦੇ, ਮੁੱਲ ਬ੍ਰੇਸ ਵਿੱਚ ਲਪੇਟ ਸਕਦੇ (
{…}— Microsoft GUID ਸੰਮੇਲਨ), ਜਾਂ ਕੱਚੇ 16 ਬਾਈਟ base64 ਵਜੋਂ ਦਿਖਾ ਸਕਦੇ।
ਇਹ UUID ਜਨਰੇਟਰ ਕਿਉਂ ਵਰਤੋ?
- ਕੁਝ ਵੀ ਤੁਹਾਡੇ ਬ੍ਰਾਊਜ਼ਰ ਤੋਂ ਬਾਹਰ ਨਹੀਂ ਜਾਂਦਾ। Web Crypto API ਸਥਾਨਕ ਤੌਰ 'ਤੇ ਚੱਲਦੀ ਹੈ; ਪੇਜ ਸ਼ੁਰੂਆਤੀ ਦਸਤਾਵੇਜ਼ ਲੋਡ ਤੋਂ ਬਾਅਦ ਕੋਈ ਨੈੱਟਵਰਕ ਬੇਨਤੀ ਨਹੀਂ ਕਰਦਾ।
- RFC-ਸਹੀ ਆਉਟਪੁੱਟ। v4 RFC 4122 §4.4, v1 §4.2 ਅਤੇ §4.5 ਦੀ ਪਾਲਣਾ ਕਰਦਾ ਹੈ, ਅਤੇ v7 RFC 9562 §5.7 ਦੀ। ਵਰਜ਼ਨ ਨਿੱਬਲ ਅਤੇ ਵੇਰੀਐਂਟ ਬਿੱਟ ਉੱਥੇ ਰੱਖੇ ਜਾਂਦੇ ਹਨ ਜਿੱਥੇ ਮਾਨਕ ਕਹਿੰਦੇ ਹਨ।
- ਡੇਟਾਬੇਸ ਕੁੰਜੀਆਂ ਲਈ ਛਾਂਟਣਯੋਗ v7। Postgres, MySQL ਜਾਂ SQL Server ਵਿੱਚ ਕਲੱਸਟਰਡ ਪ੍ਰਾਇਮਰੀ ਕੁੰਜੀ ਵਜੋਂ ਵਰਤਿਆ v7 UUID ਇੰਡੈਕਸ 'ਤੇ ਇਨਸਰਟ ਕੇਵਲ-ਜੋੜ ਰੱਖਦਾ ਹੈ — ਕੋਈ ਪੇਜ ਸਪਲਿੱਟ ਨਹੀਂ — ਜਦੋਂ ਕਿ ਅਜੇ ਵੀ ਵਿਸ਼ਵ-ਪੱਧਰੀ ਵਿਲੱਖਣ ਰਹਿੰਦਾ ਹੈ।
- ਰੇਟ ਸੀਮਾਵਾਂ ਤੋਂ ਬਿਨਾਂ ਬਲਕ ਪੀੜ੍ਹੀ। ਇੱਕੋ ਵੇਲੇ 1, 10, 100 ਜਾਂ 1,000 UUIDs ਬਣਾਓ। ਕੋਈ ਕੋਟਾ ਅਤੇ ਕੋਈ ਸਾਈਨਅੱਪ ਨਹੀਂ — ਸੰਦ ਤੁਹਾਡੇ ਟੈਬ ਵਿੱਚ ਚੱਲਦਾ ਹੈ।
UUIDs ਦੀਆਂ ਆਮ ਵਰਤੋਂ ਕੀ ਹਨ?
UUIDs ਉੱਥੇ ਦਿਖਾਈ ਦਿੰਦੇ ਹਨ ਜਿੱਥੇ ਕਿਸੇ ਸਿਸਟਮ ਨੂੰ ਕੇਂਦਰੀ ਅਧਿਕਾਰ ਨਾਲ ਤਾਲਮੇਲ ਕੀਤੇ ਬਿਨਾਂ ਵਿਸ਼ਵ-ਵਿਲੱਖਣ ਆਈਡੈਂਟੀਫਾਇਰ ਦੀ ਲੋੜ ਹੈ:
- ਡੇਟਾਬੇਸ ਪ੍ਰਾਇਮਰੀ ਕੁੰਜੀਆਂ। ਆਟੋ-ਵਧਦੇ ਪੂਰਨ ਅੰਕ ਕਤਾਰ ਗਿਣਤੀ ਲੀਕ ਕਰਦੇ ਹਨ ਅਤੇ ਸ਼ਾਰਡਿੰਗ ਤੋੜਦੇ ਹਨ। UUIDs ਸ਼ਾਰਡਾਂ ਵਿੱਚ ਸਥਿਰ ਹਨ, ਖੇਤਰਾਂ ਵਿੱਚ ਮਿਲਾਉਣ ਲਈ ਸੁਰੱਖਿਅਤ ਹਨ, ਅਤੇ (v7 ਨਾਲ) ਪੇਜ ਸਪਲਿੱਟ ਤੋਂ ਬਿਨਾਂ B-ਰੁੱਖ ਇਨਸਰਟ ਗਰਮ ਰੱਖਦੇ ਹਨ।
- ਬੇਨਤੀ ਸੰਬੰਧ IDs। HTTP ਮਿਡਲਵੇਅਰ ਹਰ ਆਉਂਦੀ ਬੇਨਤੀ ਨਾਲ ਇੱਕ v4 UUID ਜੋੜਦਾ ਹੈ, ਇਸਨੂੰ ਹਰ ਸਪੈਨ 'ਤੇ ਲਾਗ ਕਰਦਾ ਹੈ, ਅਤੇ ਇਸਨੂੰ ਡਾਊਨਸਟ੍ਰੀਮ ਪ੍ਰਚਾਰਿਤ ਕਰਦਾ ਹੈ (ਅਕਸਰ
X-Request-Idਹੈੱਡਰ ਵਜੋਂ)। ਜਦੋਂ ਕੋਈ ਗਾਹਕ ਇੱਕ ਬੱਗ ਦੀ ਰਿਪੋਰਟ ਕਰਦਾ ਹੈ, ਤਾਂ ਸਪੋਰਟ ਇੰਜੀਨੀਅਰ ID ਪੇਸਟ ਕਰਦਾ ਹੈ ਅਤੇ ਪੂਰੀ ਬੇਨਤੀ ਟ੍ਰੇਸ ਸਾਹਮਣੇ ਆ ਜਾਂਦੀ ਹੈ — ਸੇਵਾਵਾਂ ਅਤੇ ਟਾਈਮ ਜ਼ੋਨਾਂ ਦੇ ਆਰ-ਪਾਰ — ਬਿਨਾਂ ਕਿਸੇ ਅਸਪਸ਼ਟਤਾ ਦੇ। - ਆਇਡੈਂਪੋਟੈਂਸੀ ਕੁੰਜੀਆਂ। ਭੁਗਤਾਨ APIs (Stripe, Adyen, Square) ਇੱਕ
Idempotency-Keyਹੈੱਡਰ ਸਵੀਕਾਰ ਕਰਦੇ ਹਨ ਤਾਂ ਜੋ ਦੁਬਾਰਾ ਕੀਤੀ ਬੇਨਤੀ ਗਾਹਕ ਨੂੰ ਕਦੇ ਦੋ ਵਾਰ ਚਾਰਜ ਨਾ ਕਰੇ। ਕਲਾਇੰਟ-ਬਣਾਇਆ UUID ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ ਕਿ ਕੁੰਜੀ ਪ੍ਰਤੀ ਤਾਰਕਿਕ ਓਪਰੇਸ਼ਨ ਵਿਲੱਖਣ ਹੈ।
UUID ਉਦਾਹਰਨ ਕਿਹੋ ਜਿਹੀ ਦਿਖਦੀ ਹੈ?
Node.js ਜਾਂ ਇੱਕ ਆਧੁਨਿਕ ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ, ਇੱਕ-ਲਾਈਨਰ crypto.randomUUID() ਇੱਕ ਨਵਾਂ v4 UUID ਵਾਪਸ ਕਰਦਾ ਹੈ — ਉਦਾਹਰਨ ਲਈ 3f50b5a8-2c54-4b9c-9c1f-3e5c7e2b8d12। ਇਸਨੂੰ ਇੱਕ ਬੇਨਤੀ ID ਜਾਂ ਇੱਕ idempotency ਕੁੰਜੀ ਲਈ ਵਰਤੋ। ਜਦੋਂ UUID ਇੱਕ ਡੇਟਾਬੇਸ ਕਾਲਮ ਵਿੱਚ ਜਾ ਰਿਹਾ ਹੈ ਜੋ ਕਲੱਸਟਰਡ ਪ੍ਰਾਇਮਰੀ ਕੁੰਜੀ ਬਣੇਗਾ, ਤਾਂ ਇਸਦੀ ਬਜਾਏ v7 ਬਣਾਓ: ਇੱਕ ਮਿਲੀਸਕਿੰਟ ਦੀ ਦੂਰੀ 'ਤੇ ਪੈਦਾ ਕੀਤੇ ਦੋ v7 ਮੁੱਲ, ਜਿਵੇਂ 0190a3b0-7d4f-7c9e-8b21-a4d6f0bd9c11 ਅਤੇ 0190a3b0-7d50-7f15-9c4e-72b3e0c1d8a4, ਪੈਦਾਵਾਰ ਕ੍ਰਮ ਵਿੱਚ ਲੈਕਸੀਕੋਗ੍ਰਾਫਿਕ ਤੌਰ 'ਤੇ ਛਾਂਟੀ ਕਰਦੇ ਹਨ। Postgres ਦਾ uuid ਟਾਈਪ ਦੋਵੇਂ ਵਰਜ਼ਨ ਇੱਕੋ ਜਿਹੇ ਸਟੋਰ ਕਰਦਾ ਹੈ — ਫ਼ਰਕ ਇੰਡੈਕਸ-ਲਿਖਣ ਦੇ ਸਮੇਂ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ, ਜਿੱਥੇ v7 ਇਨਸਰਟ B-tree ਦੇ ਸੱਜੇ ਪਾਸੇ ਜੋੜੇ ਜਾਂਦੇ ਹਨ ਜਦੋਂ ਕਿ v4 ਇਨਸਰਟ ਖਿੰਡ ਜਾਂਦੇ ਹਨ ਅਤੇ ਬੇਤਰਤੀਬੇ I/O ਨੂੰ ਮਜਬੂਰ ਕਰਦੇ ਹਨ।
ਇਹ UUID ਜਨਰੇਟਰ ਇੱਕ ਕੰਮ ਕਰਦਾ ਹੈ: ਇੱਕ ਕਲਿੱਕ ਨੂੰ ਇੱਕ ਜਾਂ ਕਈ RFC-ਅਨੁਕੂਲ ਆਈਡੈਂਟੀਫਾਇਰਾਂ ਵਿੱਚ ਬਦਲਣਾ, ਜਿਵੇਂ ਤੁਹਾਨੂੰ ਲੋੜੀਂਦਾ ਫਾਰਮੈਟ ਵਿੱਚ, ਤੁਹਾਡੀ ਬੇਨਤੀ ਸਰਵਰ ਨੂੰ ਭੇਜੇ ਬਿਨਾਂ। ਵਰਜ਼ਨ ਚੁਣੋ, ਗਿਣਤੀ ਚੁਣੋ, ਫਾਰਮੈਟ ਚੁਣੋ — ਬਣਾਓ, ਕਾਪੀ ਕਰੋ, ਅੱਗੇ ਵਧੋ।