Saltar al contenido

UUID o autoincremental como clave primaria: ¿qué usan?

Sandra G.

Nivel 3 ·

En el equipo estamos discutiendo esto para un proyecto nuevo. Unos dicen que los IDs autoincrementales exponen cuántos registros tenemos y son adivinables. Otros, que los UUID son lentos y ocupan mucho. ¿Experiencias?
610 vistas 7 respuestas 4 0

Respuestas 7

  1. Tamara I.

    Nivel 3 ·

    0 0

    Los dos argumentos son ciertos. Un ID secuencial en una URL pública deja adivinar otros recursos y estimar tu volumen. Un UUID ocupa 16 bytes contra 8 de un BIGINT.

  2. Alejandro

    Nivel 3 ·

    1 0

    El problema de rendimiento es sobre todo con UUIDv4, que es totalmente aleatorio: cada inserción cae en cualquier lugar del índice B-tree y lo fragmenta. Con tablas grandes se nota.

  3. CITLALI A.

    Nivel 3 ·

    0 0

    Por eso se está usando cada vez más UUIDv7, que arranca con un timestamp y es ordenable. Quedó estandarizado este año en el RFC nuevo de UUID.

  4. Daniela

    Nivel 3 ·

    0 0

    Patrón que usamos: BIGINT autoincremental como PK interna para los JOINs, y un UUID aparte como identificador público en la API.

  5. Ana R.

    Nivel 3 ·

    0 0

    Ojo que 'adivinable' no es un problema de seguridad si tu API valida permisos como corresponde. Si alguien puede ver el pedido 1235 sin ser el dueño, el problema no es el ID.

  6. Sandra G.

    Nivel 3 ·

    0 0

    Muy buen punto el último. Creo que vamos a ir por el patrón mixto. Gracias a todos.

  7. Alejandro

    Nivel 3 ·

    0 0

    Si usan Postgres, guárdenlo como tipo uuid nativo, no como texto. Ocupa mucho menos y compara más rápido.