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

sobrepasar campo int

Estas en el tema de sobrepasar campo int en el foro de Bases de Datos General en Foros del Web. Hola Estoy creando una pagína donde los usuarios pueden subir fotos. En la tabla de fotos tengo un campo id_foto int autoincrement. Es bastante improbable, ...
  #1 (permalink)  
Antiguo 15/10/2010, 03:23
Avatar de atoleon  
Fecha de Ingreso: marzo-2007
Mensajes: 156
Antigüedad: 17 años, 1 mes
Puntos: 1
sobrepasar campo int

Hola

Estoy creando una pagína donde los usuarios pueden subir fotos. En la tabla de fotos tengo un campo id_foto int autoincrement.
Es bastante improbable, pero si se crearan tantos registros como para superar la capacidad del campo que pasaría?

Ya se que puedo usar bigint, pero sería desaprobechar memoria en caso de que no hubiesen tantas fotos y de todas maneras, también es un número finito, me imagion que también podría darse el caso de que se desbordara.

Saludos a todos.
  #2 (permalink)  
Antiguo 15/10/2010, 03:49
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, 5 meses
Puntos: 2658
Respuesta: sobrepasar campo int

Por empezar, no es conveniente usar simplemente un INT, sino que hay que usar siempre INT UNSIGNED en los autoincrement, primero porque de esa forma el rango representable es el doble, y segundo porque el autoincrement no genera negativos, con lo que en realidad estás desperdiciando precisamente la mitad de los IDs posibles a generar.
Además de eso, en el supuesto caso de que llegases a almacenar las 4.294.967.295 fotos (creo que tendrías problemas de almacenamiento antes que de IDs), lo que sucedería es que obtendrías errores por "clave duplicada", ya que como no puede crear un INT UNSIGNED mayor a 4294967295, ese sería el número que intenta grabar repetidamente; y si lo desborda, simplemente empezaría por el 1, con lo que el mensaje de error sería el mismo.
En cualquier caso no se entiende mucho por qué te parece desperdicio de memoria usar un BIGINT... se trata de 4 bytes adicionales nada más por registro.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 15/10/2010, 07:40
Avatar de atoleon  
Fecha de Ingreso: marzo-2007
Mensajes: 156
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: sobrepasar campo int

Si, naturalmente que no llegaré a almacenar tantas fotos aunque ten en cuenta que cuando un registro se borra, el autoincrement sigue contando desde donde estabas es decir, que puedes estar el autoincrement en 4 millones y sólo tener 1000 fotos.
De todas maneras el ejemplo iba para algo más general. Imagina cualquier caso donde se pudiera albergar tantos registros como para desbordar. Me imagino que debe haber algún caso donde haya ocurrido. Por ejemplo en los mensajes de un foro. En este foro se escriben cientos de mensajes diarios, después de x años se puede llegar perfectamente.
Mi pregunta es como actuar en ese caso. A mi sólo se me ocurre quitar el autoincrement y utilizar un sistema de id's progamado por mi mismo. Donde utilice el mes_año_contador, por ejemplo.

P.D. gracias por contestar
  #4 (permalink)  
Antiguo 19/10/2010, 10:54
Avatar de atoleon  
Fecha de Ingreso: marzo-2007
Mensajes: 156
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: sobrepasar campo int

Aún sigo dándole vueltas al asunto este.
He estado pensando que existen casos donde un autoincremente, aún siendo bigint unsigned puede llegar a ser desbordado. Por ejemplo, en un foro se escriben miles de mensajes de diarios por lo que en algún tiempo tendrá que llegar a cantidades desorbitadas.
Una solución fácil sería la de hacerlo manualmente, pero en unabase de datos donde se escriben registros muy muy amenudo y rápido podrías caer en el error de generar el mismo número de registro si se da la casualidad de que escriben al mismo tiempo.
Al igual soy un neurótico, pero no encuentro una solución fácil a este problema y la verdad es que me está empezando a incordiar un poco.

A ver si alguien puede mostrarme la luz en este camino.

Saludos
  #5 (permalink)  
Antiguo 19/10/2010, 11:44
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, 5 meses
Puntos: 2658
Respuesta: sobrepasar campo int

Cita:
He estado pensando que existen casos donde un autoincremente, aún siendo bigint unsigned puede llegar a ser desbordado. Por ejemplo, en un foro se escriben miles de mensajes de diarios por lo que en algún tiempo tendrá que llegar a cantidades desorbitadas.
Piensalo mejor... O mejor aún, toma la calculadora y haz la cuenta.

Si 100.000.000 de personas publicasen 1.000.000 de mensajes diarios en esa web, se necesitarían 505 años 4 meses aproximadamente para agotar los números de ID...

¿Realmente crees que necesitas preocuparte por eso?

Si quieres hacerlo, entonces usa un VARCHAR cuyo valor obtengas de la función UUID(), donde tendrás 36 caracteres y 2,2300745198530623141535718272648e+43 combinaciones posibles...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 19/10/2010, 17:50
Avatar de atoleon  
Fecha de Ingreso: marzo-2007
Mensajes: 156
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: sobrepasar campo int

La verdad es que viendo los cálculos uno se queda más tranquilo... yo con que me dure un par de años voy sobrado XDDDD
Muchas gracias gnzsoloyo. Si algún día mi página triunfa te pondré en los créditos

Etiquetas: int, campos
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 22:16.