IZN Tools

Генератор UUID

v4 и v7 — по одному или сразу десять тысяч.

Ожидание ввода
122 случайных бита — без порядка и без утечки информации
Посчитано на вашем устройстве

Что означают версии

UUID — это 128 бит, из которых четыре зарезервированы под номер схемы.

  • v4 — 122 случайных бита. Ни структуры, ни порядка, ни информации.
  • v7 — 48 бит миллисекунд Unix, дальше случайные биты. Сортируется по времени создания как обычный текст.

Есть и другие версии (v1 зашивает MAC-адрес, v5 хеширует пространство имён), но эти две закрывают почти любую практическую потребность.

Почему v7 важен для базы данных

Индекс B-tree хранит ключи по порядку. С первичными ключами v4 каждая вставка попадает в случайную точку индекса — постоянные расщепления страниц и рабочий набор, разрастающийся до размера всей таблицы. С v7 вставки идут в конец, как у автоинкрементного целого, — но без обращения к базе за следующим значением.

В этом и есть настоящее преимущество перед целочисленным ключом: приложение, воркер очереди или офлайн-клиент могут выдать идентификатор, ни у кого не спрашивая.

Формат записи

Каноническая форма — 36 символов в нижнем регистре с дефисами. Фигурные скобки и верхний регистр — соглашения Microsoft, они до сих пор встречаются в коде .NET и COM, поэтому оба варианта здесь есть. Но если выбор за вами, оставайтесь в канонической форме.

Вопросы

v4 или v7?+

v7, если идентификатор станет первичным ключом в базе, v4 — во всех остальных случаях. В v7 старшие биты содержат метку времени в миллисекундах, поэтому значения сортируются по времени и новые строки попадают в конец индекса. v4 равномерно случаен: вставки разбрасываются по всему индексу и фрагментируют его.

Не утекает ли информация из v7?+

Он раскрывает время создания с точностью до миллисекунды. Обычно это безобидно, иногда нет: номер заказа в виде v7 сообщает клиенту, сколько заказов вы приняли в ту же секунду. Там, где время создания чувствительно, берите v4.

Могут ли два значения совпасть?+

В v4 — 122 случайных бита. Чтобы вероятность одного совпадения достигла 50%, нужно генерировать миллиард в секунду примерно 85 лет. Закладываться на этот риск смысла нет.

Случайность настоящая?+

Она берётся из `crypto.getRandomValues` — криптографического генератора браузера, а не из `Math.random()`. Значения не покидают устройство, поэтому никто, кроме вас, сгенерированных идентификаторов не видел.