UUID (Universally Unique Identifier) — це 128-бітний ідентифікатор, який можна генерувати незалежно на будь-якій кількості машин, майже без ризику, що два UUID випадково збігуться. Записується як 32 шістнадцяткові цифри, розділені дефісами: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
Версії UUID
- v1 — на основі поточного часу та MAC-адреси мережевої картки. Гарантує унікальність, але частково розкриває, коли і на якому пристрої створено ідентифікатор.
- v4 — повністю випадковий (окрім кількох службових бітів, що позначають версію). Найпоширеніший варіант сьогодні саме через відсутність побічної інформації.
- v5 — детермінований, обчислюється як хеш від простору імен і рядка — той самий вхід завжди дає той самий UUID.
Чому ймовірність колізії практично нульова
У UUID v4 випадковими є 122 біти. Навіть якщо генерувати мільярди UUID за секунду протягом століть, ймовірність хоча б одного збігу залишається astronomically малою — це математично обґрунтовано теоремою про день народження для простору такого розміру.
Навіщо це потрібно
- Генерувати первинні ключі бази даних без центрального лічильника чи координації між серверами.
- Створювати ідентифікатори сесій, запитів чи транзакцій у розподілених системах.
- Уникати передбачуваних послідовних ID, які легко перебрати (на відміну від
1, 2, 3...).
UUID v7: компроміс між випадковістю і сортуванням
Повністю випадковий UUID v4 погано впливає на продуктивність індексів бази даних — нові записи вставляються в хаотичні позиції дерева індексу замість кінця. Новіший UUID v7 вирішує це, вбудовуючи мітку часу в перші біти ідентифікатора: значення лишаються практично унікальними, як v4, але природно сортуються за часом створення, як послідовний лічильник.