6.5 KiB
6.5 KiB
aliases | tags | date | zero-link | parents | linked | ||
---|---|---|---|---|---|---|---|
|
2023-11-12 |
|
Universal Unique IDentifier (UUID). RFC-4122.
Представляет собой 128 bit строку. Но заполнить можно только 122 бита, так как 6 bit зарезервировано:
- 4 бита под версию uuid
- 2 бита под variant
Как именно заполняются 122 бита регламентирует версия UUID:
- 2 специальный UUID
- Nil UUID. Все 0.
- Max UUID. Все f.
- 5 стандартных версии (RFC 4122)
- 3 новые версии
UUID V1
^v1
- Используется григорианское время. Сортировать нельзя, так как время записано наоборот.
- Рандомная компонента
- Node ID привязан к железу. Необходимо подменять на фейковое значение.
Минусы:
- Не сортируемый.
Плюсы:
- Константное время вставки в БД.
- Перебрать сложно.
- Можно извлечь метку времени.
UUID V3
^v3
- Устарел, лучше использовать UUID v5.
UUID V4
^v4
- Все биты рандомные
Минусы:
- Время вставки растет. Чем больше записей существует, тем дольше вставка.
- Не сортируемый
- Не хранит дополнительной информации
Плюсы:
- Невозможно перебрать
UUID V5
^v5
- Такой же, как и V3, но использует SHA1, вместо MD5.
Минусы:
- Время вставки растет. Чем больше записей существует, тем дольше вставка.
- Не сортируемый
- Не хранит дополнительной информации.
Плюсы:
- Сложно перебрать
UUID V6
^v6
Исправляет проблему UUID v1 и делает его сортируемым, изменяя порядок записи времени.
UUID V7
^v7
- Используется Unix время, вместо григорианского.
- Unix занимает меньше места, чем григорианское
- Остальная часть рандомная
Плюсы:
- Константное время вставки в БД.
- Сортируемый.
- Сложно перебрать.
- Можно извлечь метку времени.
- Тип 1 (по умолчанию):
UuidCreator.getTimeOrderedEpoch();
- twice as fast as
UUID.randomUUID()
- Плюсы: Предоставляет хороший баланс между уникальностью и последовательностью. Подходит для ситуаций, где важен порядок элементов.
- Минусы: Более низкий уровень случайности по сравнению с Типами 2 и 3, что может быть менее предпочтительным для сценариев, требующих высокой уникальности.
- Максимально возможная последовательность
- Тип 2 (плюс 1):
UuidCreator.getTimeOrderedEpochPlus1();
- 20x faster than
UUID.randomUUID()
- Плюсы: Обеспечивает более высокий уровень уникальности и последовательности за счет монотонного увеличения. Подходит для создания уникальных сущностей с сохранением порядка.
- Минусы: Менее случаен, чем Тип 3, что может быть недостаточным для очень высоких требований к уникальности.
- Тип 3 (плюс n):
UuidCreator.getTimeOrderedEpochPlusN()
;- twice as fast as
UUID.randomUUID()
- Плюсы: Максимальная уникальность за счет случайного увеличения. Подходит для сценариев, где требуется высокая уникальность без строгих требований к последовательности.
- Минусы: Меньшая предсказуемость и последовательность по сравнению с Типами 1 и 2, что может быть проблемой в некоторых приложениях.
- Максимальная уникальность без строгих требований к последовательности.
Автоинкремент
- Нужно место, где мы будем хранить последнее состояние
Плюсы:
- Сортируемый
- Легко читаемый и запоминаемый
Минусы:
- Легко перебрать и получить все записи. А также можно прикидывать статистику: сколько заказов было, количество за неделю.
- Имеет конечный диапазон значений
- Не хранит дополнительную информацию
Преобразование автоинкремента в UUID
Производительность
Генерируем по 200000 идентификаторов в цикле, после чего вставляем эти данные.