13 puntos por GN⁺ 2023-10-03 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2023-10-03
Comentarios en Hacker News
  • UUIDv7 es útil para sistemas distribuidos internos gracias a que sus claves tienen orden, pero puede no ser adecuado como identificador público por posibles problemas de seguridad.
  • Se dice que los IDs aleatorios perjudican el rendimiento, pero en realidad pueden ser mejores para sistemas de almacenamiento distribuido porque evitan hotspots en un solo nodo.
  • Existen varias versiones de UUID debido a los requisitos cambiantes de los identificadores y a las propiedades deseadas.
  • UUIDv7 combina las ventajas de una clave primaria secuencial para una indexación eficiente con una clave secundaria UUID para uso externo.
  • Uno de los posibles problemas de UUIDv7 es que los usuarios pueden extraer la hora de creación a partir del ID.
  • Se publicó como open source una función UUID v7 para PostgreSQL, que ofrece ventajas como mejoras de velocidad en inserciones por lotes.
  • UUIDv7 puede usarse con el tipo uuid de Postgres, que acepta cualquier dato con la longitud correcta.
  • Algunos prefieren una clave primaria secuencial de 64 bits y una clave aleatoria adicional de 64 bits para uso externo, con el fin de ocultar información sobre el tamaño de los datos y la fecha de creación.
  • Los UUID son útiles para generar claves desde muchas fuentes separadas que luego deben fusionarse.
  • Existe debate sobre la necesidad de “validar” los GUIDs/UUIDs. A menudo se tratan como identificadores opacos.
  • La elección entre UUIDv7 y ULIDs depende de los requisitos específicos; los ULIDs ofrecen 6 bits adicionales de aleatoriedad más allá de lo que los UUIDs usan para metadatos.