Tipo de clave primaria: int vs long


Sé que algunas tiendas de software se han quemado usando el tipo int para la clave primaria de una clase persistente. Dicho esto, no todas las mesas crecen más allá de 2 billones. De hecho, la mayoría no.

Entonces, ¿ustedes usan el tipo largo solo para aquellas clases que están mapeadas a tablas potencialmente grandes O para cada clase persistente solo para ser consistentes? ¿Cuál es el consenso de la industria?

Voy a dejar esta pregunta abierta por un tiempo para que pueda compartir con nosotros su historias de éxito / terror.

Author: Visruth, 2010-11-08

4 answers

Long puede ser ventajoso incluso si la tabla no crece súper grande, pero tiene una alta rotación, es decir, si las filas se eliminan/insertan con frecuencia. Su identificador único auto-generado/secuencial puede aumentar a un número alto mientras la tabla permanece pequeña.

Generalmente uso Largo porque los beneficios de rendimiento no se notan en la mayoría de mis proyectos, sin embargo, un error debido al desbordamiento sería muy notable!

Eso no quiere decir que Int no es una mejor opción para otros escenarios de las personas, por ejemplo, para el procesamiento de datos o sistemas de consulta complejos. Solo tenga claro los riesgos / beneficios y cómo afectan su proyecto específico.

 21
Author: pstanton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-08 01:09:11

No se sobre "quemado". No es difícil cambiar de int a long cuando lo necesitas. La conversión es sencilla en SQL, y luego es solo una búsqueda y reemplazo en el código del cliente (o hacer el cambio en la capa de persistencia, y luego compilar y ver qué se rompe.) Se está moviendo de un tipo entero a otro, por lo que no tiene que preocuparse por problemas sutiles de conversión o truncamiento..

Pasar de float a double sería mucho más difícil.

 2
Author: Erik Funkenbusch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-07 23:00:55

Porque Int siempre será más rápido para Select/Sort.

 1
Author: Thalaivar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-07 22:10:46

Uso Integer para mis claves sustitutas a menos que tenga la necesidad de que sean otra cosa. No es necesario utilizar siempre un Largo si usted no tiene una necesidad de él.

(Normalmente uso JPA/Hibernate en mis proyectos que se ejecutan contra Oracle 10g o MySQL 5.x bases de datos.)

 1
Author: Steven Benitez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-07 23:01:48