Il limite di Int32 per la colonna Identity

0

Questa è solo una considerazione per un sito che sto creando e per altri grandi siti là fuori.

Sto usando Identity Column per memorizzare l'ID di alcune delle mie tabelle e ho classi il cui Id è decorato con Int32 per contenere il valore dell'ID recuperato dal database.

La mia preoccupazione è che, man mano che il sito cresce, alcune tabelle che crescono in modo esponenziale, ad esempio QuestionComments , potrebbero superare il limite Int32 in futuro. Così cambio la mia classe per usare long .

public class Question
{
   public long QuestionID { get; set; }
   ...
}

// Conversione del valore del database in .Net type

 Question q = new Question();
 q.QuestionID = Convert.ToInt32(myDataRow["QuestionID"]);

Quanto è vera la mia ipotesi? Sarebbe meglio usare un UniqueIdentifier? C'è un altro modo per risolvere questo problema?

UPDATE:

Ma per motivi di apprendimento, come siti come FaceBook, Google, StackOverflow, ecc. gestisci la tabella delle visite assumendo che abbiano VisitID come colonna Identity

    
posta tunmise fasipe 23.08.2012 - 09:29
fonte

2 risposte

6

Int32 è un numero intero a 32 bit. È anche firmato. Ciò significa che può contenere 2 ^ 31 - 1 diversi valori positivi. Questo arriva a:

2,147,483,647

Sono oltre 2 ID miliardi univoci. Se puoi utilizzare un numero intero senza segno, questo raddoppia a 4 miliardi.

long è un intero con segno a 64 bit. Questo è 2 ^ 63 - 1 diversi valori positivi che vengono a:

9,223,372,036,854,775,807

Sono oltre 9 ID quintillion univoci (nome per gentile concessione del link ) che è di molti ordini di grandezza in più di il numero intero a 32 bit può contenere.

Quindi, se pensi di avere oltre 2 miliardi di entità in una delle tue tabelle dovresti usare long . Questo dovrebbe essere sufficiente per qualsiasi scopo.

    
risposta data 23.08.2012 - 09:51
fonte
2

Avevo l'impressione che qualsiasi database moderno usasse un numero intero "lungo" senza segno a 64 bit come chiave surrogata (identificatore univoco) per impostazione predefinita. In MySQL, ogni record ha un numero di riga e se dichiarate questa colonna correttamente, in realtà non prende alcuna (ulteriore) memoria nel database. Perché dovresti usare qualcos'altro?

    
risposta data 23.08.2012 - 14:09
fonte

Leggi altre domande sui tag