Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] ¿Desbordamiento en el campo id?

Estas en el tema de ¿Desbordamiento en el campo id? en el foro de Mysql en Foros del Web. Hola, imaginen que tienen una tabla de millones de comentarios, usuarios o lo que sea.El campo que los identifica a cada comentario es un int ...
  #1 (permalink)  
Antiguo 15/03/2013, 06:49
 
Fecha de Ingreso: septiembre-2012
Mensajes: 51
Antigüedad: 11 años, 7 meses
Puntos: 0
¿Desbordamiento en el campo id?

Hola, imaginen que tienen una tabla de millones de comentarios, usuarios o lo que sea.El campo que los identifica a cada comentario es un int unsigned.¿Que ocurriría en el caso de Twitter(por poner un ejemplo) cuando sobrepase el valor de 4294967295 registros en el id de la tabla tweets?¿Como se solucionaría ese problema para que siga funcionando la aplicación?

Gracias.
  #2 (permalink)  
Antiguo 15/03/2013, 06:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Desbordamiento en el campo id?

BIGINT UNSIGNED, o bien usar UUID() para registrarlos, aunque con el primero alcanzaría.

Miralo así: Con un BIGINT UNSIGNED, si cada persona del mundo (literalmente cada uno), publicase 500 mensajes por día, llevaría 14.400 años agotar la numeración, y eso sólo considerando sistemas de 32 bits.

Con el UUID()... El Universo se extinguirá antes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 15/03/2013 a las 07:00
  #3 (permalink)  
Antiguo 15/03/2013, 09:59
 
Fecha de Ingreso: septiembre-2012
Mensajes: 51
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: ¿Desbordamiento en el campo id?

Muchas gracias gnzsoloyo. Me ha quedado claro con tu respuesta. Por lo visto en esos casos es necesario un mayor consumo de memoria usando tipos de datos más grandes(BIGINT) con tal de mantener a tantos usuarios interactuando a pesar de que no es lo más óptimo.
  #4 (permalink)  
Antiguo 15/03/2013, 10:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Desbordamiento en el campo id?

Y... es una decisión de diseño del sistema.
En realidad, lo más ortodoxo es crear una PK no numerica ni incremental, pero para eso se debe definir correctamente cuál es la clave apropiada para la entidad.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 15/03/2013, 18:42
 
Fecha de Ingreso: septiembre-2012
Mensajes: 51
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: ¿Desbordamiento en el campo id?

Claro, lo difícil es identificar en ese caso como debería ser la PK, pero tampoco creo que la diferencia de rendimiento sea mucha en caso de usar BIGINT que el caso que me has expuesto.De todas BIGINT sería una solución perfectamente válida y nada es para siempre xD.
  #6 (permalink)  
Antiguo 21/03/2013, 17:34
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: ¿Desbordamiento en el campo id?

Un int requiere un tamaño fijo de 4 bytes mientras que un bigint requiere un tamaño también fijo de 8 bytes. Aunque el número sea menor se aplica el zerofill que completa lo restante agregando ceros por la izquierda y el int/bigint(n) especifica un número n de display, por lo que no influye.

El impacto de esto en el rendimiento no es muy elevado, pero sí es importante en el tamaño de la tabla, que puede crecer en torno a un 10%.

Por ejemplo, una tabla con clave primaria de autoincremento en int de 500 mil entradas comparado con una tabla similar de bigint en sqlserver 2005 tiene un impacto de un 4 a un 5% con respecto al tiempo de procesamiento. Por ejemplo, si una consulta arbitraria en una tabla int tardara 0,5 segundos, una análoga con bigint tardaría 0,525 segundos.

Un saludo.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor

Etiquetas: tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:07.