ULID ಜನರೇಟರ್

ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ULID ಗಳನ್ನು ರಚಿಸಿ: 48-ಬಿಟ್ ಸಮಯ ಮತ್ತು 80 ಯಾದೃಚ್ಛಿಕ ಬಿಟ್‌ಗಳೊಂದಿಗೆ 26-ಅಕ್ಷರಗಳ Crockford Base32 ID ಗಳು.

ಫಾರ್ಮ್ಯಾಟ್
ರಚಿಸಲಾದ ID ಗಳು
ಸಿದ್ಧವಾಗಿದೆ. ನಿಮ್ಮ ಬ್ರೌಸರ್‌ನಲ್ಲಿ ULID ಗಳನ್ನು ರಚಿಸಿ.

ಈ ID ಅನ್ನು ಹೇಗೆ ನಿರ್ಮಿಸಲಾಗಿದೆ

ಲೇಔಟ್
26 Crockford Base32 ಅಕ್ಷರಗಳು: 10 ಸಮಯದ ಅಕ್ಷರಗಳು ಮತ್ತು ನಂತರ 16 ಯಾದೃಚ್ಛಿಕ ಅಕ್ಷರಗಳು.
ಎಂಟ್ರೊಪಿ (Entropy)
48-ಬಿಟ್ ಮಿಲಿಸೆಕೆಂಡ್ ಟೈಮ್‌ಸ್ಟ್ಯಾಂಪ್ ನಂತರ 80 ಯಾದೃಚ್ಛಿಕ ಬಿಟ್‌ಗಳು.
ಸಮಯ
ಹೌದು. ಮೊದಲ 10 ಅಕ್ಷರಗಳು ಮಿಲಿಸೆಕೆಂಡ್ ಸಮಯವನ್ನು ಎನ್‌ಕೋಡ್ ಮಾಡುತ್ತವೆ, ಮತ್ತು ಲೆಕ್ಸಿಕಲ್ ಕ್ರಮವು ಸಮಯವನ್ನು ಅನುಸರಿಸುತ್ತದೆ.
ಘರ್ಷಣೆಯ ಅಪಾಯ (Collision risk)
ಯಾದೃಚ್ಛಿಕ ಕೊನೆಯ ಭಾಗವು 80 ಬಿಟ್‌ಗಳನ್ನು ಹೊಂದಿದೆ; ಅಪಾಯವು ಮುಖ್ಯವಾಗಿ ಒಂದೇ ಮಿಲಿಸೆಕೆಂಡ್‌ನಲ್ಲಿ ನೀವು ಎಷ್ಟು ID ಗಳನ್ನು ರಚಿಸುತ್ತೀರಿ ಎಂಬುದರ ಮೇಲೆ ಇರುತ್ತದೆ.
ಉದಾಹರಣೆ
01M12BRQ1C8P3YSJF9T1Z76HRR

ನಿಮ್ಮ ID ಗಳನ್ನು ಬ್ರೌಸರ್ ಯಾದೃಚ್ಛಿಕತೆಯೊಂದಿಗೆ ಸ್ಥಳೀಯವಾಗಿ ರಚಿಸಲಾಗುತ್ತದೆ. BroBroGo ಗೆ ಏನನ್ನೂ ಕಳುಹಿಸಲಾಗುವುದಿಲ್ಲ.

ಪದೇ ಪದೇ ಕೇಳಲಾಗುವ ಪ್ರಶ್ನೆಗಳು (FAQ)

ULID ಯಾವುದಕ್ಕೆ ಉಪಯುಕ್ತವಾಗಿದೆ?

ULID ಕಾಂಪ್ಯಾಕ್ಟ್ ಆಗಿದೆ, URL-ಸ್ನೇಹಿಯಾಗಿದೆ ಮತ್ತು ಸರಳ ಪಠ್ಯವಾಗಿ ಸಮಯ-ವಿಂಗಡಿಸಬಹುದಾಗಿದೆ (time-sortable), ಇದು ಲಾಗ್‌ಗಳು, ಆಬ್ಜೆಕ್ಟ್ ಕೀಗಳು ಮತ್ತು ರಚನೆಯ ಸಮಯದ ಆಧಾರದ ಮೇಲೆ ವಿಂಗಡಿಸಬೇಕಾದ ದಾಖಲೆಗಳಿಗೆ ಉಪಯುಕ್ತವಾಗಿದೆ.

ULID ಮತ್ತು UUID v7 ಒಂದೇ ಆಗಿವೆಯೇ?

ಇಲ್ಲ. ಎರಡೂ ಮಿಲಿಸೆಕೆಂಡ್ ಸಮಯವನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ, ಆದರೆ ULID ಯು Crockford Base32 ಮತ್ತು 26 ಅಕ್ಷರಗಳನ್ನು ಬಳಸುತ್ತದೆ, ಆದರೆ UUID v7 ಪ್ರಮಾಣಿತ UUID ಹೆಕ್ಸಾಡೆಸಿಮಲ್ ರೂಪವನ್ನು ಹೊಂದಿರುತ್ತದೆ.

ULID ಜನರೇಟರ್ ಪುಟ: ವೈಶಿಷ್ಟ್ಯಗಳು ಮತ್ತು ಬಳಕೆ

ULID (Universally Unique Lexicographically Sortable Identifier) ಜನರೇಟರ್ ಪುಟವು ಬಳಕೆದಾರರಿಗೆ ಸಣ್ಣ, ಸಮಯ-ವಿಂಗಡಿಸಬಲ್ಲ ಮತ್ತು 26-ಅಕ್ಷರಗಳ ಗುರುತುಗಳನ್ನು ಸೃಷ್ಟಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. ಈ ಪುಟದ ವಿಶೇಷತೆ ಏನೆಂದರೆ, ಇದು UUID ಗಳಿಗಿಂತ ಚಿಕ್ಕದಾದ (26 ಅಕ್ಷರಗಳು vs 36 ಅಕ್ಷರಗಳು) ಮತ್ತು Crockford ನ base32 ವರ್ಣಮಾಲೆಯನ್ನು ಬಳಸುತ್ತದೆ — ಇದರಿಂದಾಗಿ ಗುರುತುಗಳು ಕೇಸ್-ಇನ್ಸೆನ್ಸಿಟಿವ್ (ದೊಡ್ಡಕ್ಷರ/ಸಣ್ಣಕ್ಷರ ವ್ಯತ್ಯಾಸವಿಲ್ಲದ) ಮತ್ತು ಹೈಫನ್ಗಳಿಲ್ಲದೆ ಇರುತ್ತವೆ. ನೀವು 1 ರಿಂದ 100 ರವರೆಗೆ ಯಾವುದೇ ಸಂಖ್ಯೆಯ ULID ಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಬಹುದು, ಮತ್ತು ಪ್ರತಿಯೊಂದು ಗುರುತನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಅಥವಾ ಸಂಪೂರ್ಣ ಪಟ್ಟಿಯನ್ನು ಒಂದೇ ಬಾರಿಗೆ ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಬಹುದು.

ಪುಟವು ಸರಳ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಹೊಂದಿದೆ: ಫಾರ್ಮ್ಯಾಟ್ ಆಯ್ಕೆಯನ್ನು ULID ಗೆ ಹೊಂದಿಸಿ, ಎಷ್ಟು ಗುರುತುಗಳು ಬೇಕು ಎಂಬುದನ್ನು ನಮೂದಿಸಿ, ಮತ್ತು "ಜನರೇಟ್" ಬಟನ್ ಒತ್ತಿದರೆ ತಕ್ಷಣವೇ ಪಟ್ಟಿ ರಚನೆಯಾಗುತ್ತದೆ. ಯಾವುದೇ ಆಯ್ಕೆಯನ್ನು ಬದಲಾಯಿಸಿದಾಗ (ಫಾರ್ಮ್ಯಾಟ್, ಎಣಿಕೆ) ಹೊಸ ಪಟ್ಟಿ ಉತ್ಪತ್ತಿಯಾಗುತ್ತದೆ. ಸ್ಥಿತಿ ಸಂದೇಶಗಳು "Ready." (ಸಿದ್ಧ), "Generated." (ರಚಿಸಲಾಗಿದೆ), ಮತ್ತು "Copied all!" (ಎಲ್ಲವನ್ನೂ ನಕಲಿಸಲಾಗಿದೆ) ಎಂಬುದಾಗಿ ಪ್ರದರ್ಶಿಸಲ್ಪಡುತ್ತವೆ. ಯಾವುದೇ ಅಪ್ಪರ್ಕೇಸ್ ಟಾಗಲ್ ಅಥವಾ ಹೈಫನ್ ಟಾಗಲ್ ULID ಗಾಗಿ ಅಗತ್ಯವಿಲ್ಲ, ಏಕೆಂದರೆ ULID ಸ್ವತಃ ಕೇಸ್-ಇನ್ಸೆನ್ಸಿಟಿವ್ ಮತ್ತು ಹೈಫನ್ಗಳಿಲ್ಲದೆ ಇರುತ್ತದೆ.

ಎಲ್ಲಾ ID ಜನರೇಷನ್ ಬಳಕೆದಾರರ ಬ್ರೌಸರ್ ನಲ್ಲಿಯೇ ಸಂಭವಿಸುತ್ತದೆ, crypto.getRandomValues() ಬಳಸಿ ಬಲವಾದ ರ್ಯಾಂಡಮ್ನೆಸ್ನೊಂದಿಗೆ. ಯಾವುದೇ ಮಾಹಿತಿಯನ್ನು ಸರ್ವರ್ಗೆ ಕಳುಹಿಸಲಾಗುವುದಿಲ್ಲ, ಇದು ಗೌಪ್ಯತೆ ಮತ್ತು ಸುರಕ್ಷತೆಯನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.

ULID ನ ಆಂತರಿಕ ರಚನೆ: 128 ಬಿಟ್ಗಳ ವಿಭಜನೆ

ULID ಒಟ್ಟು 128 ಬಿಟ್ಗಳನ್ನು ಹೊಂದಿದೆ, ಇದನ್ನು ಎರಡು ಭಾಗಗಳಾಗಿ ವಿಂಗಡಿಸಲಾಗಿದೆ:

  • ಮೊದಲ 10 ಅಕ್ಷರಗಳು (48 ಬಿಟ್ಗಳು): ಇವು ಮಿಲಿಸೆಕೆಂಡ್ ನಿಖರತೆಯ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಅನ್ನು ಸಂಗ್ರಹಿಸುತ್ತವೆ. ಇದು ಗ್ರೆಗೋರಿಯನ್ ಕ್ಯಾಲೆಂಡರ್ನ ಸಮಯವನ್ನು (Unix epoch ನಿಂದ) ಮಿಲಿಸೆಕೆಂಡ್ಗಳಲ್ಲಿ ಎನ್ಕೋಡ್ ಮಾಡುತ್ತದೆ. ಈ ಕಾರಣದಿಂದಾಗಿ ULID ಗಳು ಲೆಕ್ಸಿಕೊಗ್ರಾಫಿಕ್ ಆಗಿ ವಿಂಗಡಿಸಲ್ಪಡುತ್ತವೆ.
  • ಕೊನೆಯ 16 ಅಕ್ಷರಗಳು (80 ಬಿಟ್ಗಳು): ಇವು ಸಂಪೂರ್ಣವಾಗಿ ಯಾದೃಚ್ಛಿಕ (random) ಅಂಶವನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತವೆ. ಪ್ರತಿ ULID ನ ವಿಶಿಷ್ಟತೆಗೆ ಇದು ಕಾರಣವಾಗಿದೆ.

ಈ ರಚನೆಯು ULID ಗಳನ್ನು ಸಮಯಾನುಸಾರವಾಗಿ ವಿಂಗಡಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ — ಮೊದಲ 10 ಅಕ್ಷರಗಳು ಹೆಚ್ಚುತ್ತಿರುವ ಕಾಲಮಾನವನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತವೆ, ಆದ್ದರಿಂದ ಹೊಸ ULID ಗಳು ಹಳೆಯವುಗಳಿಗಿಂತ ದೊಡ್ಡದಾಗಿರುತ್ತವೆ. ಆದರೆ, ಒಂದೇ ಮಿಲಿಸೆಕೆಂಡ್ನಲ್ಲಿ ಉತ್ಪತ್ತಿಯಾದ ULID ಗಳ ನಡುವೆ ಕಠಿಣ ಕ್ರಮವನ್ನು ಖಾತರಿಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ — ಅವುಗಳ ರ್ಯಾಂಡಮ್ ಭಾಗವು ಕ್ರಮವನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ.

ಒಟ್ಟು 26-ಅಕ್ಷರದ ಸ್ಟ್ರಿಂಗ್ ಎಂಟು ಬಿಟ್ಗಳ ಪ್ರತಿ ಅಕ್ಷರದಲ್ಲೂ Crockford ನ base32 ಎನ್ಕೋಡಿಂಗ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಈ ಎನ್ಕೋಡಿಂಗ್ ಸಾಮಾನ್ಯ hexadecimal (base16) ಗಿಂತ ಹೆಚ್ಚು ದಟ್ಟವಾಗಿರುತ್ತದೆ, ಆದ್ದರಿಂದ 128 ಬಿಟ್ಗಳನ್ನು 26 ಅಕ್ಷರಗಳಲ್ಲಿ ಪ್ರತಿನಿಧಿಸಬಹುದು (128 / 5 = 25.6, ಆದ್ದರಿಂದ 26 ಅಕ್ಷರಗಳು ಬೇಕಾಗುತ್ತವೆ).

Crockford base32 ಎನ್ಕೋಡಿಂಗ್: ಏಕೆ ಕೇಸ್-ಇನ್ಸೆನ್ಸಿಟಿವ್ ಮತ್ತು ದೋಷ-ಮುಕ್ತ?

Crockford ನ base32 ವರ್ಣಮಾಲೆಯು 0-9 ಸಂಖ್ಯೆಗಳು ಮತ್ತು A-Z ಅಕ್ಷರಗಳಿಂದ ರಚಿತವಾಗಿದೆ, ಆದರೆ I, L, O, U ಅಕ್ಷರಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ. ಈ ನಾಲ್ಕು ಅಕ್ಷರಗಳನ್ನು ತೆಗೆದುಹಾಕಲು ಕಾರಣ ಹೀಗಿದೆ:

  • I (ಐ) ಮತ್ತು L (ಎಲ್) ಪರಸ್ಪರ ಗೊಂದಲ ಉಂಟುಮಾಡಬಹುದು (ವಿಶೇಷವಾಗಿ ಕೆಲವು ಫಾಂಟ್ಗಳಲ್ಲಿ).
  • O (ಓ) ಮತ್ತು 0 (ಶೂನ್ಯ) ನಡುವೆ ದೃಶ್ಯ ವ್ಯತ್ಯಾಸವಿರುವುದಿಲ್ಲ.
  • U (ಯು) ಅಕ್ಷರವು ತೆಗೆದುಹಾಕಲ್ಪಟ್ಟಿದೆ ಏಕೆಂದರೆ ಇದು ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ವಿವಾದಾತ್ಮಕವೆಂದು ಪರಿಗಣಿಸಲ್ಪಟ್ಟಿಲ್ಲ, ಆದರೆ ಸಾಮಾನ್ಯವಾಗಿ Crockford ನ ವಿನ್ಯಾಸದಲ್ಲಿ ಸೇರ್ಪಡೆಗೊಂಡಿಲ್ಲ.

ಪರಿಣಾಮವಾಗಿ, ULID ಸ್ಟ್ರಿಂಗ್ ನಲ್ಲಿ ಕೇವಲ 32 ಸಂಭಾವ್ಯ ಅಕ್ಷರಗಳಿವೆ (0-9 ಮತ್ತು A-Z minus I,L,O,U). ಆದರೆ, ಬಳಕೆದಾರರು ಸಣ್ಣಕ್ಷರವನ್ನು ನಮೂದಿಸಿದರೂ (ಉದಾ: a ಬದಲಿಗೆ A), ಅದನ್ನು ಸ್ವೀಕರಿಸಲಾಗುತ್ತದೆ — ಇದು ಕೇಸ್-ಇನ್ಸೆನ್ಸಿಟಿವ್. ಹೀಗಾಗಿ, 01BX5ZZKBKACTAV9WEVGEMMVS0 ಮತ್ತು 01bx5zzkbkactav9wevgemmys0 ಒಂದೇ ULID ಅನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತವೆ.

ಈ ವೈಶಿಷ್ಟ್ಯವು ULID ಅನ್ನು ಹಸ್ತಪ್ರತಿ (manual transcription) ಸಮಯದಲ್ಲಿ ಕಡಿಮೆ ದೋಷಗಳನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ. URL ನಲ್ಲಿ ಅಥವಾ ಡೇಟಾಬೇಸ್ ಕಾಲಮ್ನಲ್ಲಿ ಹುಡುಕುವಾಗ ಕೇಸ್ ಸಮಸ್ಯೆ ಇರುವುದಿಲ್ಲ.

ಕೆಳಗಿನ ಕೋಷ್ಟಕವು Crockford base32 ವರ್ಣಮಾಲೆಯನ್ನು ತೋರಿಸುತ್ತದೆ:

ಅಕ್ಷರ ಮೌಲ್ಯ ಅಕ್ಷರ ಮೌಲ್ಯ ಅಕ್ಷರ ಮೌಲ್ಯ ಅಕ್ಷರ ಮೌಲ್ಯ
0 0 1 1 2 2 3 3
4 4 5 5 6 6 7 7
8 8 9 9 A 10 B 11
C 12 D 13 E 14 F 15
G 16 H 17 J 18 K 19
M 20 N 21 P 22 Q 23
R 24 S 25 T 26 V 27
W 28 X 29 Y 30 Z 31

(I, L, O, U ಇಲ್ಲ — J, M, N, P, Q, R, S, T, V, W, X, Y, Z ಮಾತ್ರ ಅಕ್ಷರಗಳು).

UUID v4 ಮತ್ತು UUID v7 ಗೆ ಹೋಲಿಕೆ: ಉದ್ದ, ವಿಂಗಡಣೆ ಮತ್ತು ಪ್ರಾತಿನಿಧ್ಯ

ULID ಅನ್ನು UUID ಫಾರ್ಮ್ಯಾಟ್ಗಳೊಂದಿಗೆ ಹೋಲಿಸಿದಾಗ ಹಲವು ವ್ಯತ್ಯಾಸಗಳು ಸ್ಪಷ್ಟವಾಗುತ್ತವೆ:

ಗುಣಲಕ್ಷಣ ULID UUID v4 UUID v7
ಉದ್ದ 26 ಅಕ್ಷರಗಳು 36 ಅಕ್ಷರಗಳು (32 ಹೆಕ್ಸ್ + 4 ಹೈಫನ್) 36 ಅಕ್ಷರಗಳು
ವರ್ಣಮಾಲೆ Crockford base32 (ಕೇಸ್-ಇನ್ಸೆನ್ಸಿಟಿವ್) ಹೆಕ್ಸಾಡೆಸಿಮಲ್ (0-9, a-f, ಕೇಸ್-ಸೆನ್ಸಿಟಿವ್) ಹೆಕ್ಸಾಡೆಸಿಮಲ್
ಹೈಫನ್ಗಳು ಇಲ್ಲ 4 ಹೈಫನ್ಗಳು (5 ಗುಂಪುಗಳು) 4 ಹೈಫನ್ಗಳು
ವಿಂಗಡಣೆ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಆಧಾರಿತ (ಲೆಕ್ಸಿಕೊಗ್ರಾಫಿಕ್) ಯಾದೃಚ್ಛಿಕ (ವಿಂಗಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ) ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಆಧಾರಿತ (ಆದರೆ ಹ್ಯೂಲಿಸ್ಟಿಕ್)
ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ 48 ಬಿಟ್ಗಳು (ಮಿಲಿಸೆಕೆಂಡ್) ಇಲ್ಲ 48 ಬಿಟ್ಗಳು (ಮಿಲಿಸೆಕೆಂಡ್)
ರ್ಯಾಂಡಮ್ 80 ಬಿಟ್ಗಳು 122 ಬಿಟ್ಗಳು (4 ಬಿಟ್ಗಳು ವರ್ಶನ್ಗೆ) 74 ಬಿಟ್ಗಳು
ಒಟ್ಟು ಬಿಟ್ಗಳು 128 128 128

ULID ನ ಮುಖ್ಯ ಪ್ರಯೋಜನವೆಂದರೆ ಅದರ ಚಿಕ್ಕ ಉದ್ದ (26 vs 36) ಮತ್ತು ಹೈಫನ್ಗಳಿಲ್ಲದೆ ಇರುವುದು. ಇದು URL ನಲ್ಲಿ ಎಂಬೆಡ್ ಮಾಡಲು ಸುಲಭವಾಗಿಸುತ್ತದೆ. UUID v7 ಸಹ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಅನ್ನು ಹೊಂದಿದ್ದರೂ, ಅದರ ಪ್ರಾತಿನಿಧ್ಯ ಹೆಕ್ಸಾಡೆಸಿಮಲ್ ಆಗಿರುವುದರಿಂದ ಉದ್ದ ಹೆಚ್ಚಾಗಿದೆ. ULID Crockford base32 ನಿಂದಾಗಿ ಪ್ರತಿ ಅಕ್ಷರದಲ್ಲಿ 5 ಬಿಟ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸಬಹುದು, ಆದರೆ ಹೆಕ್ಸ್ ಪ್ರತಿ ಅಕ್ಷರದಲ್ಲಿ ಕೇವಲ 4 ಬಿಟ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ ULID 20% ಚಿಕ್ಕದಾಗಿದೆ.

ಇದಲ್ಲದೆ, ULID ಕೇಸ್-ಇನ್ಸೆನ್ಸಿಟಿವ್ ಆಗಿರುವುದರಿಂದ, ಬಳಕೆದಾರರು ಅದನ್ನು ಎಲ್ಲಿ ಬೇಕಾದರೂ ಬಳಸಬಹುದು — URL ನಲ್ಲಿ, ಹೆಸರುಗಳಲ್ಲಿ, ಡೇಟಾಬೇಸ್ ಕೀಗಳಲ್ಲಿ — ಯಾವುದೇ ತೊಂದರೆಯಿಲ್ಲದೆ.

ವಿಂಗಡಣೆ ವರ್ತನೆ ಮತ್ತು ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಪ್ರಾಮುಖ್ಯತೆ

ULID ಗಳ ವಿಂಗಡಣಾ ಸಾಮರ್ಥ್ಯವು ಡೇಟಾಬೇಸ್ B-ಟ್ರೀ ಇಂಡೆಕ್ಸ್ಗಳಲ್ಲಿ B-ಟ್ರೀ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ. ಯಾಕೆಂದರೆ, B-ಟ್ರೀ ಇಂಡೆಕ್ಸ್ನಲ್ಲಿ ಹೊಸ ಅಂಶಗಳನ್ನು ಸೇರಿಸುವಾಗ ಹೆಚ್ಚಿನ ಕಾರ್ಯಾಚರಣೆಗಳು ಕೊನೆಯ ಪುಟದಲ್ಲಿ (latest leaf page) ನಡೆಯುತ್ತವೆ. UUID v4 ನಂತಹ ಸಂಪೂರ್ಣ ಯಾದೃಚ್ಛಿಕ ಕೀಗಳನ್ನು ಸೇರಿಸುವಾಗ, ಅವುಗಳು ಎಲ್ಲಾ ಸ್ಥಳಗಳಲ್ಲಿಯೂ ಹರಡುತ್ತವೆ, ಆದ್ದರಿಂದ ಪುಟ ಸ್ಪ್ಲಿಟ್ಗಳು ಮತ್ತು ರಿವೈರಿಂಗ್ ಹೆಚ್ಚಾಗುತ್ತದೆ. ULID, ಹೆಚ್ಚುತ್ತಿರುವ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ನಿಂದಾಗಿ, ಸಾಮಾನ್ಯವಾಗಿ ಕೊನೆಯ ಪುಟದಲ್ಲಿ ಸೇರಿಕೊಳ್ಳುತ್ತವೆ, ಇದು ಇಂಡೆಕ್ಸ್ ಮెಂಟೆನೆನ್ಸ್ ವೆಚ್ಚವನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.

ಆದರೆ, ULID ಗಳು ಒಂದೇ ಮಿಲಿಸೆಕೆಂಡ್ನಲ್ಲಿ ಉತ್ಪತ್ತಿಯಾದರೆ ವಿಂಗಡಣೆ ಸಮಸ್ಯಾತ್ಮಕವಾಗಬಹುದು. ಅಂತಹ ಸಂದರ್ಭದಲ್ಲಿ, ಎರಡು ULID ಗಳ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಭಾಗ ಒಂದೇ ಆಗಿರುತ್ತದೆ, ಮತ್ತು ರ್ಯಾಂಡಮ್ ಭಾಗವು ವಿಂಗಡಣೆಯನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ. ಇದರರ್ಥ, ಒಂದು ಮಿಲಿಸೆಕೆಂಡ್ನೊಳಗೆ ಉತ್ಪತ್ತಿಯಾದ ಎರಡು ULID ಗಳಲ್ಲಿ ಯಾವುದು ಮೊದಲು ಸೃಷ್ಟಿಸಲ್ಪಟ್ಟಿತು ಎಂಬುದನ್ನು ಅವುಗಳ ಲೆಕ್ಸಿಕೊಗ್ರಾಫಿಕ್ ಕ್ರಮದಿಂದ ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನೀವು ಅನೇಕ ULID ಗಳನ್ನು ಏಕಕಾಲದಲ್ಲಿ ಜನರೇಟ್ ಮಾಡಿದರೆ (ಉದಾಹರಣೆಗೆ 100), ಅವು ಒಂದೇ ಮಿಲಿಸೆಕೆಂಡ್ನಲ್ಲಿ ರಚಿಸಲ್ಪಡುತ್ತವೆ, ಆದ್ದರಿಂದ ಅವುಗಳ ಕ್ರಮವು ಸಂಪೂರ್ಣವಾಗಿ ರ್ಯಾಂಡಮ್ ಆಗಿರುತ್ತದೆ. ಹೆಚ್ಚಿನ ನಿಖರತೆ ಅಗತ್ಯವಿದ್ದರೆ, ನೀವು ಪ್ರತಿ ಬಾರಿ ಒಂದೇ ULID ಅನ್ನು ಉತ್ಪಾದಿಸಬೇಕು (ಅಥವಾ ಬಹು ULID ಗಳನ್ನು ವಿಭಿನ್ನ ಸಮಯಗಳಲ್ಲಿ ಸೃಷ್ಟಿಸಬೇಕು).

ಘರ್ಷಣೆ ಸಂಭವನೀಯತೆ ಮತ್ತು ಸುರಕ್ಷತೆ

ULID ನ ಯಾದೃಚ್ಛಿಕ ಭಾಗವು 80 ಬಿಟ್ಗಳನ್ನು (16 ಅಕ್ಷರಗಳು, Crockford base32) ಹೊಂದಿದೆ. ಘರ್ಷಣೆ ಸಂಭವನೀಯತೆಯನ್ನು ಲೆಕ್ಕಹಾಕಲು, ನಾವು ಬರ್ತ್ಡೇ ಪ್ಯಾರಡಾಕ್ಸ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ. 80 ಬಿಟ್ಗಳ ರ್ಯಾಂಡಮ್ ಸ್ಪೇಸ್ನಲ್ಲಿ, n ಗುರುತುಗಳನ್ನು ಸೃಷ್ಟಿಸಿದಾಗ ಘರ್ಷಣೆಯ ಸಂಭವನೀಯತೆಯು ಸುಮಾರು n² / (2 * 2^80) ಗೆ ಸಮಾನವಾಗಿರುತ್ತದೆ.

  • 1 ಬಿಲಿಯನ್ (10^9) ULID ಗಳನ್ನು ಉತ್ಪಾದಿಸಿದಾಗ, ಘರ್ಷಣೆಯ ಸಂಭವನೀಯತೆ ಸುಮಾರು 10^18 / (2 * 1.2e24) ≈ 4.2e-7, ಅಂದರೆ 2.4 ದಶಲಕ್ಷದಲ್ಲಿ 1.
  • 100 ಬಿಲಿಯನ್ (10^11) ULID ಗಳನ್ನು ಉತ್ಪಾದಿಸಿದಾಗ, ಘರ್ಷಣೆಯ ಸಂಭವನೀಯತೆ ಸುಮಾರು 10^22 / (2 * 1.2e24) ≈ 4.2e-3, ಅಂದರೆ 240ರಲ್ಲಿ 1.

ಹೀಗಾಗಿ, ದೈನಂದಿನ ಬಳಕೆಗೆ (ಲಕ್ಷಾಂತರ ID ಗಳು) ULID ಗಳು ಅತ್ಯಂತ ಸುರಕ್ಷಿತವಾಗಿವೆ. UUID v4 ನ 122 ಬಿಟ್ಗಳು ಹೆಚ್ಚು ರ್ಯಾಂಡಮ್ ಅನ್ನು ಹೊಂದಿವೆ, ಆದರೆ ULID ನ 80 ಬಿಟ್ಗಳು ಹೆಚ್ಚಿನ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಸಾಕು — ವಿಶೇಷವಾಗಿ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಸ್ಪೇಸ್ನಿಂದಾಗಿ ಪ್ರತಿ ಮಿಲಿಸೆಕೆಂಡ್ಗೆ ಉತ್ಪಾದಿಸಬಹುದಾದ ID ಗಳ ಸಂಖ್ಯೆ ಕಡಿಮೆಯಾಗಿದೆ.

ಸ್ಥಳೀಯ ಜನರೇಷನ್ ಬ್ರೌಸರ್ನ crypto.getRandomValues() ಅನ್ನು ಬಳಸುತ್ತದೆ, ಇದು ಸುರಕ್ಷಿತ ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ (Web Crypto API). ಇದು ಭವಿಷ್ಯ ನುಡಿಯಲು ಅಸಾಧ್ಯವಾದ ರ್ಯಾಂಡಮ್ನೆಸ್ ಅನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ULID ಗಳನ್ನು ಊಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ (ಒಂದು ವೇಳೆ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ತಿಳಿದಿದ್ದರೂ ಸಹ).

URL ಸುರಕ್ಷತೆ ಮತ್ತು ಡೇಟಾಬೇಸ್ ಇಂಡೆಕ್ಸಿಂಗ್

ULID ಅಕ್ಷರಗಳು (0-9, A-Z, a-z minus I,L,O,U) RFC 3986 ರಲ್ಲಿ ವಿವರಿಸಿದ ಅನ್ರಿಸರ್ವ್ಡ್ ಅಕ್ಷರ ಸೆಟ್ಗೆ ಸೇರಿವೆ. ಅಂದರೆ, ULID ಅನ್ನು URL ನಲ್ಲಿ ನೇರವಾಗಿ ಬಳಸಬಹುದು, ಯಾವುದೇ ಪರ್ಸೆಂಟ್-ಎನ್ಕೋಡಿಂಗ್ ಅಗತ್ಯವಿಲ್ಲ. ಉದಾಹರಣೆಗೆ, https://example.com/api/users/01BX5ZZKBKACTAV9WEVGEMMVS0 ನಲ್ಲಿ ಕೊನೆಯ ಸೆಗ್ಮೆಂಟ್ ULID ಆಗಿದೆ — ಇದನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ.

ಡೇಟಾಬೇಸ್ ಇಂಡೆಕ್ಸಿಂಗ್ ದೃಷ್ಟಿಯಿಂದ, ULID ನ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಆಧಾರಿತ ರಚನೆಯು B-ಟ್ರೀ ಇಂಡೆಕ್ಸ್ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ. B-ಟ್ರೀ ಇಂಡೆಕ್ಸ್ನಲ್ಲಿ ಹೊಸ ಕೀ ಅನ್ನು ಸೇರಿಸಿದಾಗ, ಅದು ಸೂಕ್ತ ಲೀಫ್ ಪುಟದಲ್ಲಿ ಇರಿಸಲ್ಪಡುತ್ತದೆ. ಕೀ ಹೆಚ್ಚುತ್ತಿರುವ ಕ್ರಮದಲ್ಲಿದ್ದರೆ, ಹೊಸ ಕೀಗಳು ಬಲದ ಕೊನೆಯ ಲೀಫ್ ಪುಟಕ್ಕೆ ಸೇರ್ಪಡೆಯಾಗುತ್ತವೆ. ಇದರಿಂದ ಪುಟ ಸ್ಪ್ಲಿಟ್ಗಳು ಕಡಿಮೆಯಾಗುತ್ತವೆ ಮತ್ತು ಇಂಡೆಕ್ಸ್ ಮೆಂಟೆನೆನ್ಸ್ ವೆಚ್ಚ ಕಡಿಮೆಯಾಗುತ್ತದೆ. ಇದು ರ್ಯಾಂಡಮ್ UUID ಗಳಿಗಿಂತ ಗಮನಾರ್ಹ ಸುಧಾರಣೆಯಾಗಿದೆ, ಅಲ್ಲಿ ಹೊಸ ಕೀಗಳು ಅನೇಕ ಪುಟಗಳಾದ್ಯಂತ ಹರಡಬಹುದು.

ULID ನ ಮತ್ತೊಂದು ಪ್ರಯೋಜನವೆಂದರೆ ಅದರ ಹೈಫನ್-ರಹಿತ ರಚನೆ. ಇದು UUID ನ 8-4-4-4-12 ಫಾರ್ಮ್ಯಾಟ್ನಂತೆ ಯಾವುದೇ ಗುಂಪುಗಳನ್ನು ಹೊಂದಿಲ್ಲ, ಆದ್ದರಿಂದ ಪೂರ್ಣ ಸ್ಟ್ರಿಂಗ್ ಒಂದೇ ಪೀಸ್ನಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ. URL ನಲ್ಲಿ ಅಥವಾ ಹೆಸರಿನ ಸ್ಪೇಸ್ನಲ್ಲಿ ಇದನ್ನು ಸುಲಭವಾಗಿ ಕತ್ತರಿಸಬಹುದು ಅಥವಾ ಸೇರಿಸಬಹುದು.

FAQ (ಪದೇ ಪದೇ ಕೇಳಲಾಗುವ ಪ್ರಶ್ನೆಗಳು)

1. ULID ಮತ್ತು UUID ವ್ಯತ್ಯಾಸವೇನು? ULID 26 ಅಕ್ಷರಗಳನ್ನು ಹೊಂದಿದೆ, ಕೇಸ್-ಇನ್ಸೆನ್ಸಿಟಿವ್, ಹೈಫನ್ಗಳಿಲ್ಲದೆ, ಮತ್ತು ಮೊದಲ 10 ಅಕ್ಷರಗಳಲ್ಲಿ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಒಳಗೊಂಡಿದೆ. UUID v4 36 ಅಕ್ಷರಗಳನ್ನು ಹೊಂದಿದೆ, ಕೇಸ್-ಸೆನ್ಸಿಟಿವ್, 4 ಹೈಫನ್ಗಳು, ಮತ್ತು ಸಂಪೂರ್ಣವಾಗಿ ಯಾದೃಚ್ಛಿಕವಾಗಿದೆ. ULID ಗಳನ್ನು ಸಮಯಾನುಸಾರವಾಗಿ ವಿಂಗಡಿಸಬಹುದು, UUID v4 ಸಾಧ್ಯವಿಲ್ಲ.

2. ನಾನು 100 ಕ್ಕಿಂತ ಹೆಚ್ಚು ULID ಗಳನ್ನು ಪಡೆಯಬಹುದೇ? ಇಲ್ಲ. ಪುಟವು ಗರಿಷ್ಠ 100 ID ಗಳನ್ನು ಮಾತ್ರ ಉತ್ಪಾದಿಸುತ್ತದೆ. ನಿಮಗೆ ಹೆಚ್ಚು ಬೇಕಾದರೆ, ಅನೇಕ ಬಾರಿ ಜನರೇಟ್ ಮಾಡಿ ಮತ್ತು ಪರಿಣಾಮಗಳನ್ನು ಸಂಯೋಜಿಸಿ.

3. ULID ಗಳು ಭದ್ರತೆಯ ದೃಷ್ಟಿಯಿಂದ ಸುರಕ್ಷಿತವೇ? ಹೌದು, ಸ್ಥಳೀಯ ಜನರೇಷನ್ crypto.getRandomValues() ಅನ್ನು ಬಳಸುತ್ತದೆ, ಇದು ಕ್ರಿಪ್ಟೊಗ್ರಾಫಿಕ್ ಬಲವಾದ ಯಾದೃಚ್ಛಿಕತೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ. ಯಾವುದೇ ಮಾಹಿತಿ ಸರ್ವರ್ಗೆ ಕಳುಹಿಸಲ್ಪಡುವುದಿಲ್ಲ.

4. ULID ಗಳು UUID v7 ನೊಂದಿಗೆ ಹೊಂದಿಕೊಳ್ಳುತ್ತವೆಯೇ? ಇಲ್ಲ. ಅವು ವಿಭಿನ್ನ ಫಾರ್ಮ್ಯಾಟ್ಗಳು ಮತ್ತು ವಿಭಿನ್ನ ಎನ್ಕೋಡಿಂಗ್ ಅನ್ನು ಬಳಸುತ್ತವೆ. ULID Crockford base32, UUID v7 ಹೆಕ್ಸಾಡೆಸಿಮಲ್. ಅವುಗಳನ್ನು ಪರಸ್ಪರ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.

5. ನಾನು ULID ಅನ್ನು ಪ್ರಾಥಮಿಕ ಕೀಯಾಗಿ ಬಳಸಬಹುದೇ? ಹೌದು, ULID ಗಳು ಸಮಯಾನುಸಾರವಾಗಿ ವಿಂಗಡಿಸಲ್ಪಡುವುದರಿಂದ B-ಟ್ರೀ ಇಂಡೆಕ್ಸ್ ಕಾರ್ಯಕ್ಷಮತೆ ಸುಧಾರಿಸುತ್ತದೆ. ಆದರೆ, ಒಂದೇ ಮಿಲಿಸೆಕೆಂಡ್ನಲ್ಲಿ ಬಹು ID ಗಳು ರಚಿಸಲ್ಪಟ್ಟಾಗ ಕ್ರಮ ಖಾತರಿಯಿಲ್ಲ ಎಂದು ತಿಳಿಯಿರಿ.

6. ನಾನು ಹಳೆಯ ULID ಅನ್ನು ಮರಳಿ ಪಡೆಯಬಹುದೇ? ULID ಅನ್ನು ಒಮ್ಮೆ ರಚಿಸಿದ ನಂತರ ಮತ್ತೆ ಪಡೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ. ಆದರೆ, ಅದೇ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಮತ್ತು ರ್ಯಾಂಡಮ್ ಅನ್ನು ಬಳಸಿದರೆ ಅದು ಪುನರಾವರ್ತಿಸಬಹುದು — ಆದರೆ ಇದು ಸಂಭವನೀಯತೆ ಅತ್ಯಂತ ಕಡಿಮೆ.