Sé que este tipo de preguntas surgen mucho, pero aún no he leído ningún argumento convincente que me ayude a tomar esta decisión. ¡Por favor, tenga paciencia conmigo!
Tengo una gran base de datos: crece en aproximadamente 10,000,000 registros por día. Los datos son relacionales y, por razones de rendimiento, cargo la tabla con BULK COPY. Por esta razón, necesito generar claves para las filas, y no puedo confiar en una columna IDENTITY.
Un número entero de 64 bits, un bigint, es lo suficientemente ancho como para que lo use, pero para garantizar la unicidad, necesito un generador centralizado para hacer mis ID por mí. Actualmente tengo un servicio de generador que permite que un servicio reserve números de secuencia X y no garantiza colisiones. Sin embargo, una consecuencia de esto es que todos los servicios que tengo dependen de este generador centralizado, por lo que estoy limitado en cómo puedo distribuir mi sistema y no estoy contento con las otras dependencias (como requerir acceso a la red) impuestas por este diseño Esto ha sido un problema en ocasiones.
Ahora estoy considerando usar GUID secuenciales como mis claves principales (generadas externamente a SQL). Por lo que he podido determinar a partir de mis propias pruebas, el único inconveniente de estas es la sobrecarga de espacio en disco de un tipo de datos más amplio (que se ve exacerbado por su uso en los índices). No he presenciado ninguna desaceleración apreciable en el rendimiento de las consultas, en comparación con la alternativa bigint. Cargar la mesa con BULK COPY es un poco más lento, pero no mucho. Mis índices basados en GUID no se fragmentan gracias a mi implementación secuencial de GUID.
Básicamente, lo que quiero saber es si hay otras consideraciones que pueda haber pasado por alto. Por el momento, me inclino a dar el salto y comenzar a usar GUID. De ninguna manera soy un experto en bases de datos, por lo que agradecería cualquier orientación.