зеркало из
https://github.com/iharh/notes.git
synced 2025-10-29 12:46:06 +02:00
49 строки
6.3 KiB
Plaintext
49 строки
6.3 KiB
Plaintext
Использование UUID v7, v8, v9 в PostgreSQL: преимущества и сравнение с UUID v1 и v4 (ч. 1).
|
|
|
|
В предыдущей заметке мы рассмотрели с вами использование UUID v1 и v4 в PostgreSQL в качестве значений для первичного ключа, в этой заметке посмотрим на более новые версии UUID и их преимущества. В следующей (последней на эту тему) заметке посмотрим как все это можно использовать в PostgreSQL.
|
|
|
|
Для начала давайте разберёмся куда делись версии UUID 2, 3, 5 и 6.
|
|
|
|
📌 UUID v2 (DCE Security).
|
|
Основана на версии 1 (временная метка + MAC-адрес), но включает идентификаторы безопасности, такие как POSIX UID/GID. Редко применяется на практике из-за узкой специализации. Связана с устаревшими системами аутентификации.
|
|
|
|
📌 UUID версии 3 и 5 (хеш-базированные).
|
|
v3: Использует хеш MD5 (устарел).
|
|
v5: Использует хеш SHA-1.
|
|
Обе генерируют UUID на основе пространства имен (например, DNS, URL) обеспечивая детерминированность.
|
|
Плюсы: Повторяемость результата, подходят для связывания данных с уникальными ключами.
|
|
|
|
📌 UUID v6.
|
|
Модификация версии 1. Сохраняет уникальность на основе времени и MAC-адреса, но изменяет порядок битов для улучшения сортировки.
|
|
|
|
Как видите, эти версии в основном являются модификацией UUID v1 и либо устарели, либо являются слишком узкоспециализированными. Поэтому наш выбор - более новые версии UUID. Давайте разбираться с ними:
|
|
|
|
📌 UUID v7
|
|
|
|
Это временной UUID, который основан на временных метках (timestamp). В отличие от UUID v1, который также использует временные метки, UUID v7 имеет более структурированный формат, что позволяет лучше использовать его для сортировки и индексации. UUID v7 включает:
|
|
|
|
✅ 48 бит для временной метки;
|
|
|
|
✅ Остальные биты используются для случайных значений, что и обеспечивает уникальность.
|
|
|
|
📌 UUID v8
|
|
|
|
Это пользовательский UUID, который позволяет разработчикам самостоятельно определять структуру идентификатора. Это гибкий формат, который может быть адаптирован под конкретные нужды приложения. Например, можно включить в UUID информацию о версии приложения, регионе или других метаданных.
|
|
|
|
📌 UUID v9
|
|
|
|
Это расширение стандарта UUID, которое позволяет создавать идентификаторы с использованием хэш-функций. Это полезно для случаев, когда нужно генерировать UUID на основе определенных данных (например, строки или числа), сохраняя при этом уникальность.
|
|
|
|
Преимущества UUID v7, v8, v9 по сравнению с UUID v1 и v4.
|
|
|
|
📌 Улучшенная сортировка и индексация (UUID v7). UUID v1 и v4 не подходят для сортировки по времени, так как их структура не гарантирует временной порядок. UUID v7, напротив, включает временную метку, что позволяет сортировать записи по времени создания. Это особенно полезно для логов, событий и других временных данных.
|
|
|
|
📌 Гибкость и кастомизация (UUID v8). UUID v8 предоставляет разработчикам возможность создавать UUID с пользовательской структурой. Это позволяет включать в идентификатор дополнительные данные, такие как версия приложения, регион или другие метаданные. В отличие от UUID v1 и v4, которые имеют фиксированную структуру, UUID v8 более адаптивен.
|
|
|
|
📌 Генерация на основе данных (UUID v9). UUID v9 позволяет генерировать UUID на основе хэш-функций, что полезно для создания уникальных идентификаторов из определенных данных. Например, можно создать UUID на основе имени пользователя или другого уникального значения.
|
|
|
|
📌 Совместимость и стандартизация.
|
|
UUID v7, v8 и v9 соответствуют современным стандартам и могут быть легко интегрированы в существующие системы. Они обеспечивают большую гибкость и функциональность по сравнению с UUID v1 и v4.
|
|
|
|
В общем и целом, новые версии UUID призваны устранить недостатки версий 1 и 4, в особенности в части сортировки и индексирования, а также предоставить нам больший контроль и свободу действий (UUID v8). На этом пока что все!
|