So che questo tipo di domanda emerge molto, ma devo ancora leggere qualsiasi argomento convincente per aiutarmi a prendere questa decisione. Per favore abbi pazienza!
Ho un enorme database: cresce di circa 10.000.000 di record al giorno. I dati sono relazionali e per motivi di prestazioni carico la tabella con BULK COPY. Per questo motivo, devo generare le chiavi per le righe e non posso fare affidamento su una colonna IDENTITY.
Un numero intero a 64 bit - un bigint - è abbastanza largo per me da usare, ma per garantire unicità, ho bisogno di un generatore centralizzato per creare i miei ID per me. Attualmente ho un tale servizio di generatore che consente a un servizio di riservare numeri di sequenza X e non garantisce collisioni. Tuttavia, una conseguenza di ciò è che tutti i servizi che ho sono dipendenti da questo unico generatore centralizzato, quindi sono limitato nel modo in cui posso distribuire il mio sistema e non sono contento delle altre dipendenze (come richiedere l'accesso alla rete) imposte con questo disegno. Questo è stato un problema in alcune occasioni.
Sto prendendo in considerazione l'utilizzo di GUID sequenziali come chiavi primarie (generate esternamente a SQL). Per quanto ho potuto constatare dai miei test, l'unico inconveniente è il sovraccarico di spazio su disco di un tipo di dati più ampio (che è esacerbato dal loro uso negli indici). Non ho assistito ad alcun rallentamento percepibile nelle prestazioni della query, rispetto all'alternativa bigint. Il caricamento della tabella con BULK COPY è leggermente più lento, ma non di molto. I miei indici basati su GUID non si stanno frammentando grazie all'implementazione GUID sequenziale.
Fondamentalmente, quello che voglio sapere è se ci sono altre considerazioni che potrei aver trascurato. Al momento, sono propenso a fare il salto e iniziare a utilizzare i GUID. Non sono affatto un esperto di database, quindi apprezzerei davvero ogni consiglio.