2011-10-14 14 views
11

En una aplicación JPA/Hibernate que utiliza secuencias nativas de Oracle, ¿es mejor usar una única secuencia global como hibernate_sequence, o definir una secuencia separada por tabla?¿Qué es mejor: secuencia global única vs. secuencia por tabla?

Parece que una secuencia única es más fácil de mantener, pero podría dificultar la resolución de problemas o las consultas ad hoc al hacer identificaciones más largas.

+2

¿Entiende qué tan grande es Java long? No muchas aplicaciones tienen que temer que se agoten los ID con una larga duración, incluso si usaron una única secuencia para todos los objetos y funcionaron durante 100 años. –

+4

Algunos más discusión sobre este tema aquí (http://stackoverflow.com/questions/1536479/asking-for-opinions-one-sequence-for-all-tables) – jeff

+0

Sí, acabo de hacer los cálculos y me di cuenta de que la preocupación de rebosar un largo de 64 bits no es realista. Sin embargo, pensé en otra buena razón para usar secuencias individuales: si los contenidos de la tabla se separan de alguna manera de su secuencia, puede volver a generar el valor máximo mucho más fácilmente desde una sola tabla. – wrschneider

Respuesta

13

Aunque la caché lo alivia, una secuencia puede causar contención cuando varias sesiones requieren nextvals. Si tiene una secuencia que sirve todas las tablas, todas las inserciones de todas las tablas competirán por la misma secuencia. Si busca el rendimiento, una secuencia para cada tabla dará menos contención.

+0

Buen punto: aceptar esta respuesta, ya que la única cosa en la que no había pensado era la contención, aunque no es probable que los insertos simultáneos sean un factor para mí personalmente. Los otros problemas - la claridad y la conveniencia de los bajos # para la resolución de problemas, frente a más objetos de Oracle para mantener, parecen ser principalmente una cuestión de preferencia. – wrschneider

+0

le puede interesar este hilo: https://asktom.oracle.com/pls/asktom/f?p=100:11:451611870226342::::P11_QUESTION_ID:2985886242221 –

1

Yo recomendaría que use una secuencia por tabla. Es solo un poco más limpio en mi libro. El estándar en mi ubicación actual de empleo es la secuencia por tabla.

2

Una sola secuencia significa que no hay identificadores coincidentes en dos tablas. En la práctica, me gusta esto porque nunca puedes obtener algo cuando accidentalmente consultas la tabla incorrecta. Particularmente útil con eliminaciones. Es una pequeña cosa, pero me parece útil.

Cuestiones relacionadas