2011-10-14 10 views
11

In un'applicazione JPA/Hibernate che utilizza sequenze native Oracle, è meglio utilizzare una singola sequenza globale come hibernate_sequence o per definire una sequenza separata per tabella?Quale è meglio: sequenza globale singola o sequenza per tabella?

Sembra che una singola sequenza sia più facile da mantenere, ma potrebbe rendere più difficile la risoluzione dei problemi o le query ad hoc rendendo più lunghi ID.

+2

Capisci quanto è lungo un Java? Non molte app devono temere di rimanere a corto di id usando una lunga durata, anche se hanno usato una singola sequenza per tutti gli oggetti e hanno funzionato per 100 anni. –

+4

Un'altra discussione su questo problema qui (http://stackoverflow.com/questions/1536479/asking-for-opinions-one-sequence-for-all-tables) – jeff

+0

Sì, ho appena fatto i conti e ho capito che la preoccupazione di traboccare una lunghezza di 64 bit non è realistico. Ho pensato a un altro buon motivo per utilizzare le singole sequenze, tuttavia: se i contenuti della tabella vengono separati dalla sequenza in qualche modo, è possibile rigenerare il valore massimo molto più facilmente da una singola tabella. – wrschneider

risposta

13

Sebbene il cacheing lo allevi, una sequenza può causare conflitti quando più sessioni richiedono nextvals. Se si dispone di una sequenza che serve tutte le tabelle, tutti gli inserimenti su tutte le tabelle si contendono la stessa sequenza. Se sei dopo la performance, una sequenza per ogni tabella darà meno contesa.

+0

Bene, accettando questa risposta, poiché la contesa è l'unica cosa a cui non avevo pensato, anche se gli inserimenti concorrenti non sono probabilmente un fattore per me personalmente. Le altre questioni - la chiarezza e la convenienza dei # di bassa risoluzione per la risoluzione dei problemi, rispetto a più oggetti Oracle da mantenere, sembrano essere principalmente una questione di preferenza. – wrschneider

+0

potresti essere interessato a questo thread: https://asktom.oracle.com/pls/asktom/f?p=100:11:451611870226342::::P11_QUESTION_ID:2985886242221 –

1

Si consiglia di utilizzare una sequenza per tabella. È solo un po 'più pulito nel mio libro. Lo standard al mio attuale impiego è la sequenza per tabella.

2

Una singola sequenza non significa ID corrispondenti in due tabelle. In pratica mi piace perché non puoi mai ottenere qualcosa quando accidentalmente fai una query al tavolo sbagliato. Particolarmente utile con le eliminazioni. È una piccola cosa ma la trovo utile.

Problemi correlati