Усі статті

UUID: як генерують ідентифікатори, що майже ніколи не повторюються

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, але природно сортуються за часом створення, як послідовний лічильник.

Спробувати інструмент