- Buildkite adoptó el nuevo estándar UUIDv7 como PK, reemplazando el sistema anterior de PK secuencial y clave secundaria UUID
- Los UUID (Universally Unique Identifiers) son identificadores únicos que pueden generarse de forma independiente, y se usan ampliamente en sistemas distribuidos y bases de datos
- Los UUID ofrecen varias ventajas frente a los identificadores enteros secuenciales, como imprevisibilidad, evitar la exposición de información interna sensible y una capa adicional de defensa
- Sin embargo, la aleatoriedad de los UUID estándar no ordenados por tiempo puede causar problemas de rendimiento en bases de datos
- Para resolver esto, Buildkite experimentó con UUID compatibles con UUIDv4 pero ordenados por tiempo, lo que redujo en un 50% la tasa de Write Ahead Log (WAL) de su base de datos principal
- La versión 7 de UUID (UUIDv7) codifica un timestamp Unix en milisegundos en los 48 bits más significativos, y los 74 bits restantes se generan aleatoriamente
- Buildkite decidió usar UUIDv7 como clave primaria en todas las tablas nuevas, lo que elimina la necesidad de coordinar la generación de identificadores y simplifica la lógica de la aplicación
- Se consideraron alternativas como la implementación ShardingID de Instagram y la implementación de clave primaria compuesta de Shopify, pero el equipo eligió UUIDv7
- La transición a UUIDv7 requiere espacio de almacenamiento adicional debido a la longitud de 128 bits de los UUID, pero esto es insignificante en comparación con el resto del almacenamiento de una fila en la base de datos
- Actualmente están fragmentando su base de datos Postgres más grande, y en el futuro podrían usar UUIDv8 para incluir el número de shard en el identificador si fuera necesario
1 comentarios
Comentarios en Hacker News
uuidde Postgres, que acepta cualquier dato con la longitud correcta.