Saltar al contenido principal

uuid

Un Uuid es un valor único de 128 bits (16 bytes), almacenado como 16 octetos y formateado regularmente como una cadena hexadecimal en cinco grupos.

Los Uuid se utilizan para asignar identificadores únicos a entidades sin necesidad de una autoridad de asignación central.

La propiedad de unicidad no está estrictamente garantizada, sin embargo, para todos los fines prácticos, se puede suponer que una colisión involuntaria sería extremadamente improbable.

UUID v4 (Aleatorio):

  • Estructura: 122 bits de aleatoriedad pura + 6 bits para versión y variante (total 128 bits).
  • Orden: No tienen ningún orden secuencial o cronológico; dos IDs creados al instante son totalmente distintos.
  • Rendimiento en Base de Datos: Causa fragmentación en índices B-Tree (como en PostgreSQL o MySQL) porque las inserciones ocurren en posiciones aleatorias, provocando divisiones de páginas (page splits) y mayor uso de E/S.
  • Uso ideal: Tokens de sesión, secretos, identificadores anónimos o casos donde la privacidad y la máxima entropía (evitar revelar cuándo se creó el registro) son prioritarias.

UUID v7 (Ordenado por tiempo):

  • Estructura: Los primeros 48 bits son un timestamp Unix en milisegundos, seguidos por bits de versión/sub-milisegundo y ~74 bits de aleatoriedad.
  • Orden: Se ordenan de forma natural por fecha/hora (lexicográficamente y a nivel de bytes).
  • Rendimiento en Base de Datos: Las inserciones se agregan al final del índice (igual que un autoincremental), reduciendo drásticamente la fragmentación y mejorando la velocidad de escritura y lectura.
  • Uso ideal: Claves primarias (primary keys) en bases de datos relacionales, registros de eventos (event logs) y sistemas distribuidos.
  • Desventaja/Privacidad: Exponen la hora aproximada de creación del registro, lo cual puede no ser deseable en datos sensibles.

Instalación​

cargo add uuid -F v4,v7,serde
Cargo.toml
[dependencies]
uuid = { version = "1.28.0", features = ["v4", "v7", "serde"] }

Uso​

use uuid::{uuid, Uuid};

// Uuid v4
let id = Uuid::new_v4();

// Uuid v7
let id = Uuid::now_v7();

// Parsear texto a Uuid
const ID: Uuid = uuid!("67e55044-10b1-426f-9247-bb680e5fe0c8");