Domanda

Attualmente, le chiavi primarie nel nostro sistema sono lunghe 10 cifre, appena oltre il limite per i numeri interi Java. Voglio evitare qualsiasi problema di manutenzione lungo la strada causato da un overflow numerico in queste chiavi, ma allo stesso tempo non voglio sacrificare molte prestazioni del sistema per memorizzare numeri infinitamente grandi che non avrò mai bisogno.

Come gestisci la dimensione di una chiave primaria? Sto meglio attenermi agli interi Java, per il vantaggio prestazionale sul Long più grande e aumentare le dimensioni quando necessario, o dovrei mordere il proiettile, andare con Java Long per la maggior parte dei miei PK e non dovrò mai preoccuparmi di traboccare il dimensione della sequenza?

È stato utile?

Soluzione

Sono sempre andato con le chiavi lunghe (numero (18,0) nel database) perché rimuovono semplicemente la possibilità che questa situazione si verifichi in quasi tutte le situazioni (a parte le applicazioni estreme di archiviazione dei dati). Avere lo stesso tipo di dati su tutte le tabelle per la chiave significa che puoi condividere quel campo su tutti i tuoi oggetti modello in una classe genitore, oltre ad avere un codice coerente per i tuoi getter SQL e così via.

Altri suggerimenti

Sembra che la risposta dipenda dalla probabilità che trabocchi i numeri interi Java con i tuoi dati. E non c'è modo di saperlo senza avere un'idea di quali siano i tuoi dati.

Il vantaggio in termini di prestazioni sarebbe trascurabile, quindi il mio consiglio sarebbe di usare i tasti lunghi. Doverlo affrontare lungo la strada sarebbe probabilmente una seccatura maggiore.

È un equilibrio tra il costo di archiviazione e l'utilizzo di numeri interi lunghi, rispetto alla probabilità di overflow di un numero intero a 32 bit.

Considera che un numero intero a 32 bit senza segno memorizza oltre 4 miliardi di valori. Se ritieni di avere in media più di 1 nuova riga ogni secondo in questa tabella per i prossimi 136 anni, allora devi usare un Long.

I numeri interi a 32 bit in java sono numeri interi con segno, quindi solo 2 miliardi. Se per qualche motivo, SEQUENCE continua a saltare di tanto in tanto, allora ci saranno degli spazi tra i tuoi PK.

NON fa male avere un lungo (ricorda che il problema Y2K si è verificato perché alcuni sviluppatori COBOL pensavano che avrebbero salvato alcuni byte nelle date ??) :-)

Pertanto, utilizzo sempre Long.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top